database – 由于类型转换而未使用的索引?
发布时间:2020-12-12 12:43:47 所属栏目:百科 来源:网络整理
导读:由于特定表上的全表扫描,我的进程表现不佳.我已经计算了统计数据,重建了现有的索引,并尝试为此表添加新索引,但这还没有解决问题. 隐式类型转换可以停止使用索引吗?其他原因呢?全表扫描的成本比索引查找大1000左右. 编辑: SQL语句: select unique_key fro
由于特定表上的全表扫描,我的进程表现不佳.我已经计算了统计数据,重建了现有的索引,并尝试为此表添加新索引,但这还没有解决问题.
隐式类型转换可以停止使用索引吗?其他原因呢?全表扫描的成本比索引查找大1000左右. 编辑: SQL语句: select unique_key from src_table where natural_key1 = :1 and natural_key2 = :2 and natural_key3 = :3; > natural_key1的基数很高,但有一种类型转换. Java代码(不易修改): ps.setLong(1,oid); 这与列数据类型:varchar2冲突 解决方法您可以使用基于函数的索引.您的查询是: select unique_key from src_table where natural_key1 = :1 在您的情况下,索引未被使用,因为natural_key1是varchar2并且:1是数字. Oracle正在将您的查询转换为: select unique_key from src_table where 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程序员首先正确地完成它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |