Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL与LIMIT子句_Php_Mysql_Optimization_Query Optimization_Sql Limit - Fatal编程技术网

Php MYSQL与LIMIT子句

Php MYSQL与LIMIT子句,php,mysql,optimization,query-optimization,sql-limit,Php,Mysql,Optimization,Query Optimization,Sql Limit,我想知道在查询中添加限制1是否会加快处理速度 例如 我有一个查询,大多数时候会返回1个结果,但偶尔会返回10个、100个甚至1000个记录。但我只想要第一张唱片 限制1会加快速度还是没有区别 我知道我可以使用GROUP BY返回1个结果,但这只会增加更多的计算量。是的!会的 但是可以肯定的是,在sql语句的末尾添加“Limit 1”只需要几秒钟,所以为什么不试一试,看看是否有ORDER BY。ORDER BY无论如何都需要整个结果集,因此可以对其进行排序 如果你没有任何订单,它应该运行得更快 在

我想知道在查询中添加限制1是否会加快处理速度

例如

我有一个查询,大多数时候会返回1个结果,但偶尔会返回10个、100个甚至1000个记录。但我只想要第一张唱片

限制1会加快速度还是没有区别

我知道我可以使用GROUP BY返回1个结果,但这只会增加更多的计算量。

是的!会的


但是可以肯定的是,在sql语句的末尾添加“Limit 1”只需要几秒钟,所以为什么不试一试,看看是否有ORDER BY。ORDER BY无论如何都需要整个结果集,因此可以对其进行排序

如果你没有任何订单,它应该运行得更快

在任何情况下,它都会运行得至少快一点,因为整个结果集当然不需要发送。

关于MySQL站点的主题


根据查询的其他部分,它似乎可以以不同的方式加快速度。我不确定当您没有
订单
子句时,除了能够立即停止而不是返回每个结果行(如果您要返回100000条记录,这可能是一个足够大的速度)之外,它是否有帮助。

这一切都取决于查询本身。如果您正在对索引列执行索引查找(其中indexedColumn=somevalue)或排序(不带Where子句),那么限制1将真正加快速度。如果您有连接或多个where/order子句,那么事情很快就会变得非常复杂。但最重要的是,使用“限制1”将永远不会减慢查询速度。它有时会加快速度,但永远不会减慢速度

现在,在处理PHP时还有另一个问题。默认情况下,PHP将在从查询返回之前缓冲整个结果集(mysql\u query或mysqli->query仅在下载所有记录后返回)。因此,虽然查询时间可能会受到限制1的影响很小,但PHP用于缓冲结果的时间和内存却非常重要。假设每行有200字节的数据。现在,查询返回10000行。这意味着PHP必须分配额外的2mb内存(实际上接近10mb,而PHP变量结构的开销)这是您永远不会使用的。分配内存可能非常昂贵,因此一般规则是只分配您需要的(或认为您将需要的)。当您只需要1行时下载10000行是浪费


将这两种效果结合起来,你就会明白为什么如果你只想要一行,你应该总是使用“限制1”

这实际上是LIMIT子句的基本目的:p如果您知道需要多少个结果,那么应该始终指定该数字作为限制,这不仅是因为它更快(除非您执行ORDER BY),而且是为了在PHP脚本中更高效地使用内存


注意:我假设您将MySQL与PHP一起使用,因为您将PHP添加到标记中。如果您只是直接从MySQL中进行选择(在脚本语言之外),那么在使用ORDER BY时使用LIMIT的好处纯粹是为了使结果更易于管理。

实际上,即使使用了
ORDER BY
,它似乎仍然有效果。我不确定这是否是排序方式的产物,一旦第一行计数行被排序,它就可以停止排序。请参阅我答案中的链接。