我有奇怪的Oracle优化器行为:甲骨文:全扫描,而不是使用综合指数
SELECT a.id,
a.date_insert,
a.message#cnt
FROM T_MESSAGE_TRANSMIT A,
T_LIST l
WHERE a.priority_id = 0
AND a.status = 'Q'
and l.id = a.list_id
此查询过T_MESSAGE_TRANSMIT
生产全扫描,不管事实,这是一个索引覆盖priority_id
和status
领域:
CREATE BITMAP INDEX INFORMER.IX$MESSAGE_TRANSMIT$6 ON INFORMER.T_MESSAGE_TRANSMIT (STATUS, PRIORITY_ID)
表格大小约为28M行,它已在7天前进行了分析(从那天起仅添加了数千行)。
如果我使用提示/*+index(a IX$MESSAGE_TRANSMIT$6) */
那么一切都变好,还有如果我删除加入,并重写查询:
SELECT a.id,
a.date_insert,
a.message#cnt
FROM T_MESSAGE_TRANSMIT A,
WHERE a.priority_id = 0
AND a.status = 'Q'
如果我能出错?
UPD:
的问题是在这个优化设置:
optimizer_mode first_rows_10
更新了统计数据? – 2011-01-24 04:12:05
@OMG小马:统计数据已于7天前更新。 – zerkms 2011-01-24 04:14:49