database – 由于类型转换而未使用的索引?

database – 由于类型转换而未使用的索引?,第1张

概述由于特定表上的全表扫描,我的进程表现不佳.我已经计算了统计数据,重建了现有的索引,并尝试为此表添加新索引,但这还没有解决问题. 隐式类型转换可以停止使用索引吗?其他原因呢?全表扫描的成本比索引查找大1000左右. 编辑: SQL语句: select unique_key from src_table where natural_key1 = :1 and natural_key2 = :2 由于特定表上的全表扫描,我的进程表现不佳.我已经计算了统计数据,重建了现有的索引,并尝试为此表添加新索引,但这还没有解决问题.

隐式类型转换可以停止使用索引吗?其他原因呢?全表扫描的成本比索引查找大1000左右.

编辑:

SQL语句:

select unique_key from src_table where natural_key1 = :1 and natural_key2 = :2 and natural_key3 = :3;

> natural_key1的基数很高,但有一种类型转换.
>自然键的其他部分是低基数,并且未启用位图索引.
>表大小约为1,000,000条记录.

Java代码(不易修改):

ps.setLong(1,oID);

这与列数据类型:varchar2冲突

解决方法 您可以使用基于函数的索引.

您的查询是:

select    unique_key from    src_tablewhere    natural_key1 = :1

在您的情况下,索引未被使用,因为natural_key1是varchar2并且:1是数字. Oracle正在将您的查询转换为:

select    unique_key from    src_tablewhere    to_number(natural_key1) = :1

所以…为to_number(natural_key1)添加一个索引:

create index ix_src_table_fnk1 on src_table(to_number(natural_key1));

您的查询现在将使用ix_src_table_fnk1索引.

当然,最好让Java程序员首先正确地完成它.

总结

以上是内存溢出为你收集整理的database – 由于类型转换而未使用的索引?全部内容,希望文章能够帮你解决database – 由于类型转换而未使用的索引?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1160325.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存