【发布时间】:2015-02-17 10:29:58
【问题描述】:
我有 2 个带有公共字段的表。在一张表上,公共字段有一个索引 而另一方面不是。运行如下查询:
SELECT *
FROM table_with_index
LEFT JOIN table_without_index ON table_with_index.comcol = table_without_index.comcol
WHERE 1
查询的性能比运行相反的要差:
SELECT *
FROM table_without_index
LEFT JOIN table_with_indexON table_without_index.comcol = table_with_index.comcol
WHERE 1
谁能解释我为什么以及在这种情况下使用索引背后的逻辑?
【问题讨论】:
-
没有区别。优化器应该选择最快的方式来执行查询,不管你用哪种方式指定连接条件。
-
您正在从表中选择所有行,因此索引表会更快。如果它是 INNER JOIN 则无关紧要。
-
@jarlh
INNER JOINs 没有区别。在LEFT JOINs 上,优化器无法交换表。 -
@axiac,抱歉,没有仔细阅读。
标签: mysql sql performance database-indexes