実行に約 3 分かかる次の mysql クエリがあります。2 つのサブクエリがありますが、テーブルの行はほとんどありません。説明を行うと、「一時的な使用」が原因のようです。どうやら、以下の「一時的な使用」の指定に示されているように、データベースは 3 つのクエリすべてに対して一時的なテーブルを作成しているようです。
私を混乱させたのは、MySQL のドキュメントによると、temporary の使用は通常、group by と order by が原因であり、どちらも使用していないことです。サブクエリは、暗黙的なグループ化または順序付けを引き起こしますか? グループ化または順序付けに関係なく、一時テーブルを必要とするサブクエリはありますか? MySQL がより効率的に処理できるように、このクエリを再構築する方法に関する推奨事項はありますか? MySQL 設定で他のチューニングのアイデアはありますか?
mysql> explain
SELECT DISTINCT COMPANY_ID, COMPANY_NAME
  FROM COMPANY
 WHERE ID IN (SELECT DISTINCT ID FROM CAMPAIGN WHERE CAMPAIGN_ID IN (SELECT
              DISTINCT CAMPAIGN_ID FROM AD
              WHERE ID=10 AND (AD_STATUS='R' OR AD_STATUS='T'))
              AND (STATUS_CODE='L' OR STATUS_CODE='A' OR STATUS_CODE='C'));
+----+--------------------+----------+------+---------------+------+---------+------+------+------------------------------+
| id | select_type        | table    | type | possible_keys | key  | key_len | ref  | rows | Extra                        |
+----+--------------------+----------+------+---------------+------+---------+------+------+------------------------------+
|  1 | PRIMARY            | COMPANY  | ALL  | NULL          | NULL |    NULL | NULL | 1207 | Using where; Using temporary |
|  2 | DEPENDENT SUBQUERY | CAMPAIGN | ALL  | NULL          | NULL |    NULL | NULL |  880 | Using where; Using temporary |
|  3 | DEPENDENT SUBQUERY | AD       | ALL  | NULL          | NULL |    NULL | NULL |  264 | Using where; Using temporary |
+----+--------------------+----------+------+---------------+------+---------+------+------+------------------------------+
ありがとう!フィル