【问题标题】:How does 'LIMIT' parameter work in sql?'LIMIT' 参数在 sql 中如何工作?
【发布时间】:2011-07-18 16:58:46
【问题描述】:

例如,我有 4000 行,我定义了 X 限制。

查询在找到 X 行后停止?还是查询找到所有行,然后从找到的行中取出 X 行?

谢谢。

【问题讨论】:

  • LIMIT 不是 SQL 标准关键字,那么您使用的是哪个 RDBMS?

标签: mysql sql limit


【解决方案1】:

来自MySQL Reference Manual

如果你使用 LIMIT row_count 和 ORDER BY,MySQL 将结束排序为 一旦找到排序结果的前 row_count 行, 而不是对整个结果进行排序。如果订购是通过使用 索引,这非常快。如果必须进行文件排序,则所有行 match 必须选择不带 LIMIT 子句的查询,并且大多数或 必须将它们全部排序,然后才能确定 已找到第一 row_count 行。在任何一种情况下,在 已找到初始行,无需对任何余数进行排序 结果集,而 MySQL 不这样做。

因此,在应用LIMIT 之前,整个结果集似乎是可能已知的。但是 MySQL 会尝试一切它做不到的事情。您可以通过提供与您的查询相匹配的有用索引来帮助它。

编辑:此外,如果集合未排序,它会在将足够多的行流式传输到结果集时立即终止 SELECT 操作。

【讨论】:

    【解决方案2】:

    选择 * 从your_table 限制0, 10

    这将显示数据库中的前 10 个结果

    SELECT * FROM your_table LIMIT 5, 5

    这将显示记录6、7、8、9和10

    就像告诉MySql;我要你从5+1或第6条记录开始计数,但最多只能选择5条记录

    【讨论】:

    • 这并不能真正回答问题。这个问题清楚地问mysql如何处理 LIMIT 关闭而不是它如何处理它。
    • @willa 请重新阅读问题。它说:'LIMIT' 参数在 sql 中是如何工作的? 注意这个词:Work ...我的 answer 显示它是如何工作的。 .. 请让我收回我的 UpVotes。谢谢你! :)
    • 我仍然认为你没有回答这个问题。阅读标题和正文。
    • 考虑一下:例如,我有 4000 行,我定义了 X 限制。 =>> ((catch this line)) 查询在找到 X 行后停止? 查询 =>>((和这一行))找到所有行,然后取 X 行从找到的行中? ....MY_ANSWER 简单地说:如果给定:SELECT * FROM your_table LIMIT 0, 10 // MySql will return 10 rows starting from 0SELECT * FROM your_table LIMIT 5, 5 //MySql will Return rows Starting from the 6th & 7th, 8th, 9th, and 10th ... 此 ANSWER 对用户有何帮助?。 ...(以某种方式)我觉得被你的 cmets 欺负了
    • 对不起 ErickBest 我绝不想欺负你。我一直在寻找 LIMIT 如何工作的解释,老实说,你的解释并没有提供比我已经拥有的更多的知识。我已经重新阅读了问题和您的回答,对不起,但不,谢谢,您没有回答。
    【解决方案3】:

    我假设您正在考虑使用 MySQL,根据documentation,答案是视情况而定。如果您使用的是LIMIT(没有HAVING),那么:

    • 如果您只选择带有LIMIT 的几行,MySQL 使用索引 在某些情况下,通常它更愿意进行全表扫描。
    • 一旦 MySQL 向客户端发送了所需数量的行,它就会中止查询,除非您使用的是 SQL_CALC_FOUND_ROWS

    您应该在documentation 中阅读其他一些案例。

    【讨论】:

      【解决方案4】:

      它在找到 LIMIT 子句中指定的行数后停止。这可以通过大量数据来验证。如果它正在获取表的所有行并在此之后进行过滤,它会在不可能的时间内检索结果。

      【讨论】:

      • 在无序查询中。如果您要求明确排序,它可能(尽管不太可能)在达到请求的限制之前对整个集合进行排序。
      【解决方案5】:

      MySQL LIMIT 子句简介

      以下说明了带有两个参数的 LIMIT 子句语法:

      SELECT 
      select_list
      FROM
      table_name
      LIMIT [offset,] row_count;
      
      • offset 指定要返回的第一行的偏移量。第一行的偏移量是 0,而不是 1。
      • row_count 指定要返回的最大行数。

      下图说明了 LIMIT 子句:

      因此,这两个子句是等价的:

      > LIMIT row_count; 
      > LIMIT 0 , row_count;
      

      下图说明了SELECT语句中LIMIT子句的求值顺序:

      【讨论】:

        【解决方案6】:

        如果您使用的是 MS SQL Server,那么您可以按如下方式编写。

        Select TOP [x]
        
        *
        From MyTable
        

        希望对你有帮助。

        Vamyip

        【讨论】:

        • 我认为 OP 询问的是技术实现,而不是如何编写查询。
        • 如果他问的是 LIMIT,他显然不在 MSSQL 中,因为它没有 LIMIT。
        猜你喜欢
        • 2020-09-24
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        • 2023-03-10
        • 2010-11-18
        • 2022-01-11
        • 1970-01-01
        相关资源
        最近更新 更多