仅在主键上过滤单个表时,为什么优化器正在进行全表扫描?

时间:2016-12-28 09:51:33

标签: oracle sql-execution-plan

我有一个怪物大小的非分区表。我最近也更新了统计数据。

主键位于名为“ID”的字段上。

SELECT * FROM "MYDATA" WHERE "ID" = '0000492319'

该计划是TABLE ACCESS (FULL),并且具有ID的过滤谓词。这导致查询需要8秒才能运行。

如果我给优化器提供使用主键的提示,则查询需要1.6秒才能运行。

我很奇怪我应该提供这个提示。索引计划估计成本较低,优化器应该意识到这一点。

以下是过滤谓词:

NLSSORT(INTERNAL_FUNCTION(ID),'nls_sort="JAPANESE_M"')=HEXTORAW('017...')

数据库NLS_SORT设置为JAPANESE_MNLS_CHARAACTERSETJA16SJIS。 因此,似乎没有什么不匹配会导致调用特殊的排序函数。虽然有点奇怪。

还有一条信息,如果我在查询中仅选择“ID”列,则刨床会自动选择INDEX (FAST FULL SCAN)。 只有当我使用select *时才会出现问题。

Oracle数据库版本:10.2.0.5.0。

0 个答案:

没有答案