最近、私が持っているクエリの実行速度が非常に遅く、クエリごとにほぼ1秒であることに気付きました。
クエリは次のようになります
SELECT eventdate.id、 eventdate.eid、 eventdate.date、 eventdate.time、 eventdate.title、 eventdate.address、 eventdate.rank、 eventdate.city、 eventdate.state、 eventdate.name、 source.link、 タイプ、 eventdate.img ソースから 右アウタージョイン (( SELECT event.id、 開催日、 users.name、 users.rank、 users.eid、 event.address、 event.city、 event.state、 event.lat、 event.`long`、 GROUP_CONCAT(types.type SEPARATOR'|')ASタイプ FROMイベントFORCEINDEX(latlong_idx) ユーザーを参加させるevent.uid=users.id JOIN types ON users.tid = types.id -74.36829174058と-73.64365405942の間の「長い」場所 AND lat BETWEEN 40.35195025942 AND 41.07658794058 AND event.date> = '2009-10-15' GROUP BY event.id、event.date ORDER BY event.date、users.rank DESC LIMIT 0、20 )開催日 ON eventdate.uid = source.uid AND eventdate.date = source.date;
そして説明は
+ ---- + ------------- + ------------ + -------- + -------- ------- + ------------- + --------- + ------------------ ------------ + ------- + ----------------------------- ---- + | id | select_type | テーブル| タイプ| possible_keys | キー| key_len | ref | 行| エクストラ| + ---- + ------------- + ------------ + -------- + -------- ------- + ------------- + --------- + ------------------ ------------ + ------- + ----------------------------- ---- + | 1 | プライマリ| | すべて| NULL | NULL | NULL | NULL | 20 | | | 1 | プライマリ| ソース| ref | iddate_idx | iddate_idx | 7 | eventdate.id、eventdate.date | 156 | | | 2 | 派生| イベント| すべて| latlong_idx | NULL | NULL | NULL | 19500 | 一時的な使用; filesortの使用| | 2 | 派生| タイプ| ref | eid_idx | eid_idx | 4 | active.event.id | 10674 | インデックスの使用| | 2 | 派生| ユーザー| eq_ref | id_idx | id_idx | 4 | active.types.id | 1 | whereを使用する| + ---- + ------------- + ------------ + -------- + -------- ------- + ------------- + --------- + ------------------ ------------ + ------- + ----------------------------- ---- +
latlongで「forceindex」を使用してみましたが、まったく高速化されていないようです。
応答が遅くなる原因は派生テーブルですか?もしそうなら、これのパフォーマンスを改善する方法はありますか?
--------編集-------------私はそれをより読みやすくするためにフォーマットを改善しようとしました
'WHEREステートメントのみを変更して同じクエリを実行します
WHERE users.id =( SELECT users.id ユーザーから WHERE uidname ='frankt1' ユーザーによる注文。承認されたDESC、users.rank DESC 制限1) AND日付> = '2009-10-15' GROUPBYの日付 注文日)
そのクエリは0.006秒で実行されます
説明は次のようになります
+ ---- + ------------- + ------------ + ------- + --------- ------ + --------------- + --------- + ----------------- ------------- + ------ + ---------------- + | id | select_type | テーブル| タイプ| possible_keys | キー| key_len | ref | 行| エクストラ| + ---- + ------------- + ------------ + ------- + --------- ------ + --------------- + --------- + ----------------- ------------- + ------ + ---------------- + | 1 | プライマリ| | すべて| NULL | NULL | NULL | NULL | 42 | | | 1 | プライマリ| ソース| ref | iddate_idx | iddate_idx | 7 | eventdate.id、eventdate.date | 156 | | | 2 | 派生| ユーザー| const | id_idx | id_idx | 4 | | 1 | | | 2 | 派生| イベント| 範囲| eiddate_idx | eiddate_idx | 7 | NULL | 24 | whereを使用する| | 2 | 派生| タイプ| ref | eid_idx | eid_idx | 4 | active.event.bid | 3 | インデックスの使用| | 3 | サブクエリ| ユーザー| すべて| idname_idx | idname_idx | 767 | | 5 | filesortの使用| + ---- + ------------- + ------------ + ------- + --------- ------ + --------------- + --------- + ----------------- ------------- + ------ + ---------------- +