数据库索引未被调用
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'
我知道这个问题在这里被问过不止一次了。但我无法解决我的问题,因此再次发布以寻求帮助。
我在 Oracle 数据库 (11g) 中有一个名为 Transaction 的 table,有 270 万条记录。有一个包含数值的非空 varchar2(20)
(txn_id
) 列。这不是 table 的主键,并且大多数值都是唯一的。对于大多数值,我的意思是在某些情况下,一个值可以在 table.
如果我基于 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'