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 5.x 将 CSV 导入 MYSQL 数据库