
隐式类型转换可以停止使用索引吗?其他原因呢?全表扫描的成本比索引查找大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 – 由于类型转换而未使用的索引?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)