在MySQL查询中执行ORDER BY和LIMIT的顺序

时间:2010-10-13 03:44:09

标签: mysql sql-order-by limit sql-execution-plan

我有一个这样的查询,我希望以分页格式显示已排序的记录。

这是我的疑问。

SELECT * FROM answers
WHERE userid = '10'
ORDER BY votes LIMIT 10, 20

LIMIT的两个参数将用于生成记录的逐页显示。现在,我的问题是ORDER BY。 MySQL如何执行此查询?

第一路

  • 根据过滤条件选择记录
  • 对它们进行排序
  • 限制他们

第二路

  • 根据过滤条件选择记录
  • 限制他们
  • 对它们进行排序

如果我认为像MySQL引擎一样,我会想要实现第二,因为我必须对较小的记录进行排序?

有人可以对此有所了解吗?

此致

4 个答案:

答案 0 :(得分:3)

SQL LIMIT 将在所有数据库中始终处理查询结果,因此它将使用 ORDER BY 运行查询,然后该结果将受到限制。这是一个功能需求,数据库不需要像这样执行它。

因此第一种方式。

答案 1 :(得分:2)

Mysql遵循第一种方式。

答案 2 :(得分:1)

如果您想要第二种方式,请尝试使用带限制的子查询,然后订购。

类似的东西:

SELECT * FROM
(
  SELECT * FROM answers
  WHERE userid = '10'
  LIMIT 10
)
ORDER BY votes

答案 3 :(得分:0)

最后两个答案提到的第一种方式。从用户的角度来看,第二种方式无论如何都不会非常有用。