我在 MySQL 数据库中有 2 个表。“结果”表有大约 600 万行,包含 3 个内容:一个值、一个 ID 和一个不同表中结果名称的 ID。“结果名称”表包含大约 2000 行。基本上,结果名称包含描述大表中结果的长字符串。
所以,当我想做一个查询时,我只是加入这两个表,所以我知道每个结果的名称是什么。
当我尝试加入表格时,问题就来了。如果我像这样进行连接或子查询,它会很慢(连接或子查询大约需要相同的时间):
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)
为什么查询时间差异如此之大?为什么子查询被视为常规连接?