LIMIT MySQL php 的最佳实践

Posted

技术标签:

【中文标题】LIMIT MySQL php 的最佳实践【英文标题】:Best practice for LIMIT 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(为什么不呢?)如果返回多行,您可以检查错误。限制结果集消除了这种可能性。至于性能:您不会注意到任何差异。 任何性能差异(如果有)都在微秒范围内,无需担心。 ***.com/questions/3848390/… ***.com/questions/11327982/… 这是一个有趣的问题,但我同意@MajidFouladpour 的观点,即任何差异都会很小。如果您有数百万条记录的数据库,那么您可能会收到一些延迟,但此时您正在挖掘行而不是问“我如何处理这么多数据?”的真正问题 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于LIMIT MySQL php 的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

自我更新 PHP+MySQL 应用程序的最佳实践是啥?

最佳实践:使用 PHP 5.x 将 CSV 导入 MYSQL 数据库

夯实Mysql基础MySQL性能优化的21个最佳实践 和 mysql使用索引

使用 Node.js 构建网站的最佳实践

使用 Node.js 构建网站的最佳实践

php核心技术与最佳实践知识点(下)