内部結合を使用した簡単なクエリがあります。結合されるテーブルには、1500行と2500行があります。両方のテーブルに主キーがあります。このキーでは結合は行われません。
このクエリの結果セットには1500行があります。このクエリを実行すると、20秒かかります...(永遠)
SELECT so.order_id
FROM shop_orders so
INNER JOIN shop_order_payments sop
ON so.order_code = sop.order_code
WHERE sop.status = 9
ORDER BY date_created DESC
最後に「LIMIT1500」を追加すると、クエリは1秒しかかかりません。(削除すると再び20秒かかるので、キャッシュではありません...)
- どうしてこれなの ?
- そして、このクエリの結果の行数をすばやく確認する方法はありますか?
注:このクエリは、mysql()関数を使用してphpスクリプトで実行します)
* update1:EXPLAINの結果
idselect_typeテーブルタイプpossible_keyskeykey_len ref rows Extra 1 SIMPLE sop ALL NULL NULL NULLNULL1153使用場所; 一時的な使用; filesortの使用 1 SIMPLE so ALL NULL NULL NULLNULL2529ここでの使用
- アップデート2:
コメントで要求されたようにDESCを実行しました
Payment_id --int(11)PRIなしauto_increment タイムスタンプ-タイムスタンプNOCURRENT_TIMESTAMP order_code-varchar(100)NO 受け入れ-varchar(50)いいえ 金額-varchar(20)いいえ
つまり、プライマリインデックスのみが表示されますが、これはインデックスとしては十分ではありませんか?