Informixデータベースに500万以上のレコードを持つテーブルがあります。Informix DBのインデックス(インデックス?)の使用
これは実際のテーブルではありませんが、私が抱えている問題が表示されます。私はクエリを実行した場合IDX1(sale_id)、IDX2(sale_confirmed)、IDX3(VENDOR_ID)、idx4(purchaser_id)
:
表:販売
列:sale_id、sale_confirmed、VENDOR_IDは、
インデックスを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句の2番目の部分を処理するときにidx3とidx4を使用するようにデータベースを強制する方法はありますか?
新しいインデックスを作成する以外の解決策はありますか?
ありがとうございました。
どのバージョンのIDSを使用していますか?あなたの統計は十分に最新ですか?あなたはSET EXPLAIN ONでクエリプランを見ましたか? –