【问题标题】:Order of execution of ORDER BY and LIMIT in a MySQL queryMySQL 查询中 ORDER BY 和 LIMIT 的执行顺序
【发布时间】:2010-10-13 03:44:08
【问题描述】:

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

这是我的查询。

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

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

第一种方式

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

第二种方式

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

如果我像 MySQL 引擎一样思考,我想实现第二个,因为我必须对较少的记录进行排序?

有人可以解释一下吗?

问候

【问题讨论】:

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


    【解决方案1】:

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

    因此是第一种方式。

    【讨论】:

    • 这证明我需要像 MySQL 一样练习思考 :)
    【解决方案2】:

    Mysql 遵循第一种方式。

    【讨论】:

      【解决方案3】:

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

      类似:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-10
          • 2020-12-17
          • 2014-01-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多