【问题标题】:Best practice for LIMIT MySQL phpLIMIT MySQL php 的最佳实践
【发布时间】:2014-02-01 00:46:42
【问题描述】:

我想知道在 PHP PDO MySQL 查询中使用 LIMIT 是否有任何意义,结果无论如何都会返回 1 行(除非出现可怕的问题)。例如,给定一个表格:

CREATE TABLE users (
    ID Int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username varchar(25)
);

以下之间是否会有任何性能差异:

$stmt=$db->prepare("SELECT username FROM users WHERE ID=:ID");

$stmt=$db->prepare("SELECT username FROM users WHERE ID=:ID LIMIT 1");

编辑:所以我做了自己的小调查,似乎区别在于纳秒 Lol,而且两种方法都比另一种更快。我只是将每个语句放在一个 10000 倍的循环中,并记录了一些运行......也在笔记本电脑上,所以不科学或任何东西哈哈......

【问题讨论】:

  • 您正在选择id。如果id 设置为唯一,那么 MySQL 只能返回一行。如果没有设置unique(为什么不呢?)如果返回多行,您可以检查错误。限制结果集消除了这种可能性。至于性能:您不会注意到任何差异。
  • 任何性能差异(如果有)都在微秒范围内,无需担心。
  • 这是一个有趣的问题,但我同意@MajidFouladpour 的观点,即任何差异都会很小。如果您有数百万条记录的数据库,那么您可能会收到一些延迟,但此时您正在挖掘行而不是问“我如何处理这么多数据?”的真正问题

标签: php mysql


【解决方案1】:

这个查询不多,因为它是在一个主键上。

但是,如果您正在执行的查询优化程度较低,那么是的,有限制的查询和没有限制的查询之间会有一些小的差异。

知道您的查询永远不会返回超出您预期的行数,这让您高枕无忧。

【讨论】:

    【解决方案2】:

    想想每个页面调用了多少查询,以及有多少用户正在加载页面。

    您可能只在单个查询上节省几纳秒,但它们都加起来。

    【讨论】:

      【解决方案3】:

      使用子句 LIMIT 1(或更通用的 LIMIT 偏移量,长度),您可以保证在达到 LIMIT 后立即返回结果。

      如果没有这样的限制,即使找不到更多匹配项,执行也可能会继续 - 因此性能效率会降低。 SQL 查询越复杂,执行时间的差异就越明显。

      一般来说,应用合理的 LIMIT 子句总是被认为是一种好的做法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        相关资源
        最近更新 更多