2

在 mysql 中,当您有 3 个表(大量数据)通过 JOIN 子句连接时,在 SELECT 结束时您有一个 LIMIT 子句,sql 引擎生成表的笛卡尔积,然后应用 LIMIT,或者存在任何之前做过优化?

我问是因为如果我们使用大数据量,JOIN 操作是一项昂贵的操作。

在这种情况下,最好执行 JOIN 并提取所有数据,还是执行 SELECT with LIMIT 子句 N 次?

4

2 回答 2

1

短版:取决于查询

更长的版本:当你有一个 LIMIT 子句时,它假设你有以某种方式排序的数据。如果您没有明确指定 ORDER BY 子句,您将看到,只要 MySQL 找到所需的行数,查询的执行就会停止。如果您有一个需要文件排序的排序,所有数据将在一个临时表中排序,MySQL 将输出您指定的前 N ​​行。

但是如果你强制特定的连接顺序和索引使用,MySQL 会很高兴地缩短执行。

于 2012-05-22T23:02:27.653 回答
0

不,限制功能只是视觉上的事后效果。

1/ 计算 JOINS。

2/ 处理 WHERE 过滤器和 HAVING 过滤器

3/ LIMIT 减少了返回结果的数量。如果您指定了任何 ORDER BY 子句,订单仍将保留。

改进您的连接以减少计算开销。

于 2012-05-22T22:51:14.963 回答