【问题标题】:Does multiple table join slows down mysql多表连接是否会减慢mysql
【发布时间】:2015-03-06 16:01:03
【问题描述】:

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

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

我读过类似的主题

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

但问题仍然存在。

有经历过这件事的人可以回复一下吗?

【问题讨论】:

  • 从逻辑上讲,您进行的越多,消耗的进程就越多。
  • 是的,从逻辑上看来性能会受到影响,但我不知道实际性能

标签: mysql join


【解决方案1】:

默认情况下,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 来说,从多个表中排序结果可能会稍微复杂一些,并且任何时候连接文本或 blob 列时,MySQL 都需要一个临时表,还有许多其他细节。

【讨论】:

  • 我没有投票的特权,否则我也会为你投票。感谢您提供如此宝贵的信息。
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多