MySQL データベースに 2 つのテーブルがあります。「結果」テーブルには最大 600 万行あり、値、ID、および別のテーブルの結果名の ID の 3 つが含まれています。「結果名」テーブルには、約 2000 行が含まれています。基本的に、結果名には、大きなテーブルの結果を説明する長い文字列が含まれています。
したがって、クエリを実行する場合は、2 つのテーブルを結合するだけなので、各結果の名前がわかります。
テーブルに参加しようとすると問題が発生します。このような結合またはサブクエリを実行すると、遅くなります (結合またはサブクエリにはほぼ同じ時間がかかります)。
mysql> select count(analysisresults_id) from analysis_results where result_nameid in (select resultname_id from analysis_resultnames where result_name like '%amygdala%');
+---------------------------+
| count(analysisresults_id) |
+---------------------------+
| 6436 |
+---------------------------+
1 row in set (18.49 sec)
...しかし、サブクエリを個別に実行すると、わずかに高速になります。
mysql> select count(analysisresults_id) from analysis_results where result_nameid in (13,28);
+---------------------------+
| count(analysisresults_id) |
+---------------------------+
| 6436 |
+---------------------------+
1 row in set (0.01 sec)
クエリ時間にこれほど大きな違いがあるのはなぜですか? また、サブクエリが通常の結合のように扱われるのはなぜですか?