如何';根据RAM和执行时间,s php中带有LIMIT的请求sql的性能


How's the performance in php with a request sql with LIMIT in terms of RAM and time of execution

我正在编写PHP脚本,但我面临一个小问题,之间的具体区别

$sql = "SELECT * FROM $table ORDER BY date DESC LIMIT $limit OFFSET $offset";
$result = mysql_query($sql) or die(mysql_error());

和:

$sql = "SELECT * FROM $table ORDER BY date DESC";
$result = mysql_query($sql) or die(mysql_error());

就服务器中使用的RAM执行时间而言?

编辑:事实上,我选择了第一个sql请求,但出于确切的需要,我必须用PHP脚本重新检查一定数量的数据,以构建另一个数量(较小)的数据,但我不能用sqlpure来完成这项工作。(我在所有结果中都使用fetch_array,直到我有了我想要的数量)所以我想知道(在我做错任何事情之前),什么解决方案对客户端(sql+php)更快,以及什么解决方案在加载到服务器方面更安全?

第2版:重新粘贴ORDER BY子句

不幸的是,在我最常见的情况下,这并没有改变任何事情。

改进案例的出色响应:将查询限制为一条记录是否可以提高的性能

对于您的情况,本文是关于极限性能的:http://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/

答案是否显而易见?

如果限制选择查询的结果集,那么该结果集中的数据量就会减少。这样做的结果是,当查看php的内存使用情况时,主要取决于一个核心因素:

  1. 如果一次检索结果集的所有,例如通过使用类似fetchAll()的东西,那么整个结果集将被读取到内存中。

  2. 如果按顺序处理结果集,那么在给定的时间内,结果集中只有一个元素被读入内存。因此,除非您复制它,否则内存占用空间是有限的。

另一件事是php内部的性能:显然,处理的结果集中的元素越多,生成的负载就越多。因此,限制结果集的大小可能会减少负载,除非您有一个很好的方法可以从结果集中只选择一定范围的元素进行处理。

根据一般经验:总是只检索您真正需要和想要处理的数据。