次のようなクエリを最適化するのに苦労しています
SELECT RESULT_ID FROM RESULTS
WHERE SOURCE = 1 AND GROUP=2 AND SCORE1 BETWEEN 20 AND 100
ORDER BY SCORE2 LIMIT 450;
4000万行のinnodbテーブル。上位 450 件を取得するには、クエリで最大 1,500 万件の結果を並べ替える必要がある場合があります。これまでのところ、次のことを試しました。
- インデックスを定義していますが、MySQL は範囲条件の後のインデックス内の列を無視するため、ソートに慣れていません。スコア列がたくさんあるので、いくつかの列で範囲条件を取得した後、特定のスコアで並べ替え、結果セットを上位 450 に制限することができます。
- メモリ テーブルを使用しますが、このような大きな結果を並べ替える場合はうまく機能しません。
- Sphinx ですが、この種のクエリに役立つかどうかはわかりません。
また、これらの種類のクエリを最適化できる OLAP キューブの実装はありますか?