多表连接是否会降低mysql的速度

时间:2015-03-06 16:01:04

标签: mysql join

我的简单问题是:多表连接是否会降低mysql的性能?

我有一个数据集,我需要在正确索引的列上进行6个表JOIN。

我读了像

这样的帖子

Join slows down sql MySQL adding join slows down whole query MySQL multiple table join query performance issue

但问题仍然存在。

经验丰富的人可以回复吗?

1 个答案:

答案 0 :(得分:12)

默认情况下,MySQL使用Block Nested-Loop连接算法进行连接。

SELECT t1.*, t2.col1
FROM table1 t1
LEFT JOIN table2 t2
  ON t2.id = t1.id

实际上,产生与子查询相同的性能,如下所示:

SELECT t1.*, (SELECT col1 FROM table2 t2 WHERE t2.id = t1.id)
FROM table1 t1

索引对于满足子查询中的WHERE子句显然很重要,并且以相同的方式用于连接操作。

假设正确的索引,连接的性能相当于MySQL必须执行的查找次数。查找越多,所需的时间就越长。

因此,涉及的行越多,连接越慢。具有小结果集(几行)的连接很快并且被认为是正常使用。保持结果集较小并使用正确的索引,你会没事的。不要避免加入。

当然,对于MySQL来说,从多个表中排序结果可能会有点复杂,每当你加入text或blob列时,MySQL都需要一个临时表,还有很多其他细节。