2017-09-28 13 views
-1

でスキップ列は我々が今、私たちは次の形式でクエリを実行する列A、BおよびCの 上に複数列のインデックスを持つ(ビッグ)のテーブルを持っている:多くがありますので SELECT * FROM table WHERE (B=... AND C=...) OR (B=... AND C=...) OR ... テーブル内の行で、インデックスが使用されていない場合、クエリのパフォーマンスは非常に悪いです。のMySQL - インデックス

B、C列のインデックスは理想的ですが、残念ながら利用できません。他のベンダーも変更することはできません。列Aには興味のない値があります。

MySQLに利用可能なインデックスを使用させるために、WHERE:SELECT * FROM table WHERE (A IN (1, 2, 3, 4, 5, ..., 99, 100)) ((B=... AND C=...) OR (B=... AND C=...))OR ...に余分な条件を追加しました。その結果、インデックスが適切に使用され、クエリのパフォーマンスはすでにかなり向上しています。しかし、クエリでAのすべての可能な値を提供するのはちょっと醜いようです。私の気持ちは、同じことをやるより簡単なやり方や、より良いパフォーマンスが必要であるということです。

クエリでカラムAが使用されていない場合でも、MySQLにインデックスを強制的に使用させる方法はありますか?または、私たちはすでに最高のソリューションを見つけましたか?

答えて

0

はい、機能する可能性があります。

MySQL index hint

基本的には基本的にあなたがINDEXを強制する場合ので、それがバックフルテーブルスキャンを行うにだ、FROM table USE INDEX (index_name)またはFROM table FORCE INDEX (index_name)

を言うしかし、それは助けにはなりません。

代わり

FROM table 
WHERE A IN (SELECT DISTINCT A FROM table) 
AND .... 
を試してみては申し訳ありませんが、私の答えで行われていなかった

+0

クリーナーかもしれないが、それは動作しません言いたかったです!より洗練されたバージョンをテストする –

関連する問題