数据库索引未被调用

DB Index not being called

我知道这个问题在这里被问过不止一次了。但我无法解决我的问题,因此再次发布以寻求帮助。

我在 Oracle 数据库 (11g) 中有一个名为 Transaction 的 table,有 270 万条记录。有一个包含数值的非空 varchar2(20) (txn_id) 列。这不是 table 的主键,并且大多数值都是唯一的。对于大多数值,我的意思是在某些情况下,一个值可以在 table.

中出现 3-4 次

如果我基于 TXN_ID 执行 select 的简单查询,则需要大约 5 秒或更长时间才能获得 return 结果。

Select * from Transaction t where t.txn_id = 245643

我在此列上创建了一个索引,但是当我检查上述查询的解释计划时,它使用的是完整 table 扫描。此查询在应用程序中被多次使用,导致应用程序变慢。

能否请您提供一些帮助可能导致此问题的原因?

您正在将 varchar 列与数字文字 (245643) 进行比较。这迫使 Oracle 转换等式的一侧,而另一方面,它似乎选择了 "wrong" 一侧。不必猜测 Oracle 将如何处理此转换,而是使用字符文字:

SELECT * FROM Transaction t WHERE t.txn_id = '245643'