2017-12-07 15 views
0

このクエリを最適化するにはどうすればよいですか?実行に多くの時間がかかります。mysqlでgroup_concatサブクエリを最適化する方法は?

SELECT GROUP_CONCAT(`details_value`), details_key 
    FROM `correspondence_package_details` 
WHERE `correspondence_id` IN (SELECT GROUP_CONCAT(`correspondence_id`) 
           FROM `correspondence_package_header` 
           WHERE create_date BETWEEN '2017-11-01' AND '2017-11-30' 
           GROUP BY `manual_package_id`,account_id) 
    AND (`details_key` = 'to' OR `details_key` = 'cc') 
GROUP BY details_key; 
+0

IMOサブクエリでは、GROUP_CONCATとGROUP BYは使用しないでください。あなたの質問はどうしますか?フォーマットしてください。 –

答えて

0

クエリの最適化は、芸術と科学の両方です。 SQLを見るだけで、オプションを制限しています。

  1. クエリの実行計画を実行します。パフォーマンスの低い結合タイプとスキャンを確認します。
  2. すべての結合列に適切なインデックスを追加します。
  3. 日付フィールドの場合は、通常、最新または古いレコードを照会するかどうかに基づいてインデックスをソートします。
  4. データベースでoptimizeコマンドを実行すると、索引と表領域がすばやく調整されます。

クエリプランはこれに最適なツールです。

関連する問題