DB索引未被调用

时间:2015-06-19 23:04:18

标签: oracle performance oracle11g oracle10g database-performance

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

我在Oracle数据库(11g)中有一个名为Transaction的表,有270万条记录。有一个非空varchar2(20)txn_id)列,其中包含数值。这不是表的主键,大多数值都是唯一的。大多数值我的意思是有些情况下表中有一个值可以有3-4次。

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

Select * from Transaction t where t.txn_id = 245643

我在此列上创建了索引,但是当我检查上述查询的解释计划时,它正在使用全表扫描。在应用程序中多次使用此查询,这使得应用程序变慢。

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

1 个答案:

答案 0 :(得分:3)

您正在将varchar列与数字文字(245643)进行比较。这迫使甲骨文转换平等的一方,并且在手边,好像它选择了错误的"侧。不必猜测Oracle将如何处理此转换,而是使用字符文字:

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