質問があります:
SELECT listings.*, listingagents.agentid
FROM listings
LEFT JOIN listingagents ON (listingagents.id = listings.listingagentid)
LEFT JOIN ignore ON (ignore.system_key = listings.listingid)
WHERE ignore.id IS NULL
ORDER BY listings.id ASC
このクエリは非常に遅く、MySQLサーバーに大きな負荷をかけているため、このクエリのパフォーマンスを改善しようとしています。
mysqlの説明を行うと、出力には次のように表示されます。
+ -------- + ------------- + --------------- + -------- +- -------------- + ------------ + --------- + ------------ ---------------- + -------- + ------------------------ -+ | id | select_type | テーブル| タイプ| possible_keys | キー| key_len | ref | 行| エクストラ| + -------- + ------------- + --------------- + -------- +- -------------- + ------------ + --------- + ------------ ---------------- + -------- + ------------------------ -+ | 1 | シンプル| リスト| すべて| NULL | NULL | NULL | NULL | 383360 | filesortの使用| | 1 | シンプル| リスティングエージェント| eq_ref | プライマリー| プライマリー| 4 | db.listings.listingagen ... | 1 | | | 1 | シンプル| 無視する| ref | system_key | system_key | 1 | const | 404 | whereを使用する; 存在しません| + -------- + ------------- + --------------- + -------- +- -------------- + ------------ + --------- + ------------ ---------------- + -------- + ------------------------ -+
私は簡単なクエリを実行しようとしました:
SELECT listings.*
FROM listings
ORDER BY listings.id ASC
また、そのクエリには「Usingfilesort;」もあります。
フィールド「listings.id」、「listingagents.id」、および「ignore.id」は主キーです。フィールド「listingagents.id」および「ignore.system_key」にはインデックスがあります。
最初のクエリを改善するにはどうすればよいですか?