我的简单问题是:多表连接是否会降低mysql的性能?
我有一个数据集,我需要在正确索引的列上进行6个表JOIN。
我读了像
这样的帖子Join slows down sql MySQL adding join slows down whole query MySQL multiple table join query performance issue
但问题仍然存在。
经验丰富的人可以回复吗?
答案 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都需要一个临时表,还有很多其他细节。