怪我咯2017-04-17 16:53:13
理由は、record_global_id
属性をフィルタリングしていますが、条件が等しくないため、複合インデックス以降の部分は使用されません。
status
列はどのように区別されますか?インデックス (status, record_global_id)
を追加して試してみてください。
巴扎黑2017-04-17 16:53:13
質問によると、SQL には非常に多くの条件がありますが、使用できるインデックスは 1 つだけです。次の 'OR':
は非常に明白です。 リーリー全体の大きな WHERE は 2 つの部分に分割できます。アイデアは UNION です。役に立った場合は、SQL 結果を直接投稿します。^_^
変換後の SQL:
リーリーうまくいったら、実行計画のスクリーンショットをコメントに送っていただけますか?自分の疑惑を検証したいのですが、ありがとう!
ringa_lee2017-04-17 16:53:13
複合インデックス (from_uid
,to_uid
,from_type
,to_type
,type
,status
,record_global_id
) を作成します
次のように SQL を Union に変更します:
from_uid、to_uid、from_type、to_type、type、status に基づいてフィルタリングされた結果セットが小さい場合は、ユニオン サブクエリに AND を追加する必要はありません。record_global_id
< 5407938 ORDER BY record_global_id
DESC LIMIT 0, 20