我有一个怪物大小的非分区表。我最近也更新了统计数据。
主键位于名为“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_M
,NLS_CHARAACTERSET
为JA16SJIS
。
因此,似乎没有什么不匹配会导致调用特殊的排序函数。虽然有点奇怪。
还有一条信息,如果我在查询中仅选择“ID”列,则刨床会自动选择INDEX (FAST FULL SCAN)
。
只有当我使用select *
时才会出现问题。
Oracle数据库版本:10.2.0.5.0。