【发布时间】:2009-11-08 14:15:31
【问题描述】:
我在从 2 个表中执行选择时发现了一些奇怪的现象:
SELECT * FROM table_1 WHERE id IN (
SELECT id_element FROM table_2 WHERE column_2=3103);
此查询大约需要 242 秒。
但是当我执行子查询时
SELECT id_element FROM table_2 WHERE column_2=3103
耗时不到 0.002 秒(结果为 2 行)。
然后,当我这样做时
SELECT * FROM table_1 WHERE id IN (/* prev.result */)
都是一样的:0.002s。
我想知道为什么 MySQL 会像这样执行第一个查询,比单独的最后两个查询花费更多的时间?根据子查询的结果进行选择是否是最佳解决方案?
其他细节:table_1 大约有。 9000 行,table_2 有 90000 行。
在我从table_2 在column_2 上添加索引后,第一个查询耗时 0.15 秒。
【问题讨论】:
-
内部选择给出多少个结果?
-
能否发布运行
EXPLAIN SELECT * FROM table_1 WHERE id IN (SELECT id_element FROM table_2 WHERE column_2=3103)的结果。这将显示 MySQL 正在使用的查询计划和索引。 -
@Dani 帖子指出内部查询返回 2 行。
-
抱歉,错过了。在那种情况下,它根本没有意义。查询 9000 行的 2 个值不应花费 242 秒...
-
为什么不
SELECT * FROM table_1 WHERE id = (SELECT id_element FROM table_2 WHERE column_2 = 3103);?
标签: mysql optimization select