我有一個在Informix數據庫上有500萬條記錄的表。在Informix DB上使用索引(索引?)
這不是實際的表格,但會顯示我遇到的問題。
表:銷售
列:sale_id,sale_confirmed,VENDOR_ID,purchaser_id
指標:IDX1(sale_id),IDX2(sale_confirmed)的idx3(VENDOR_ID),idx4顯式地(purchaser_id)
如果我做一個查詢像這樣:
select *
from sales
where sale_confirmed IS NULL
or sale_confirmed = ''
然後查詢在約4或5秒內完成。
如果我不喜歡這樣的查詢:
select *
from sales
where vendor_id = 12345
or purchaser_id = 12345
那麼查詢運行完成的約4秒或5秒。
但是,如果我運行此查詢(前面2個查詢的組合):
select *
from sales
where (sale_confirmed IS NULL
or sale_confirmed = '')
and (vendor_id = 12345
or purchaser_id = 12345)
然後查詢運行15分鐘之前,我取消它。
數據庫似乎不夠聰明,可以串聯使用不同的索引,即它似乎無法使用idx2來查找X行並在該X行內使用idx3和idx4 - 這是對的,我會認爲這樣做會很聰明嗎?
是否有強制數據庫處理WHERE子句的第二部分時使用的idx3和idx4顯式地的一種方式?
任何其他解決方案都不足以創建新索引?
謝謝。
您使用的是哪個版本的IDS?你的統計數據是否足夠及時?您是否使用SET EXPLAIN ON查看了查詢計劃? – 2011-01-06 15:02:36