【发布时间】:2012-05-29 11:36:00
【问题描述】:
在 mysql 中,当您有 3 个表(大量数据)通过 JOIN 子句连接时,在 SELECT 末尾有一个 LIMIT 子句,sql 引擎生成表的笛卡尔积,然后应用 LIMIT,还是之前做过任何优化?
我问是因为如果我们使用大数据量,JOIN 操作是一项昂贵的操作。
在这种情况下最好执行 JOIN 并拉取所有数据,还是执行 SELECT with LIMIT 子句 N 次?
【问题讨论】:
-
Mysql 获取的数据不会超过生成结果集所需的数据。因此,如果可能的话 - 它只读取
LIMIT行数 -
另一方面,有些事情可能阻止 MySQL 提前终止——例如ORDER BY 可以强制首先实现整个 RS,因为 LIMIT 是“查看操作”。
-
@pst: 这不是很明显 - 因为
ORDER BY可能使用索引 -
@zerkms 好电话。我添加了难以捉摸的“可能”和“可以”。 SQL 数据库引擎非常智能。
-
请参阅this 链接,了解 MySQL 如何根据联接旁边的其他内容优化查询。
标签: mysql sql join query-optimization limit