加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

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程序员首先正确地完成它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读