php - LIMIT 和 OFFSET 可以帮助减少大表的执行时间

标签 php mysql

我试图从 PHP 访问 MySql 中非常大的表,但执行时间非常长(有时超过 10 分钟),我尝试使用 limit 和 offset 试图减少执行时间,但它们没有帮助。我将 limit 设置为 1,这样一旦找到该行,它就会停止搜索更多行,并且我使用了 Offset,以便下次搜索行时,从到达的最后一行开始搜索:

$offset1 = 0; 

for ($date = mktime($hour_i,$minute_i,0,$month_i,$day_i,$year_i); $date <= mktime($hour_f,$minute_f,0,$month_f,$day_f,$year_f); $date = mktime($hour,$minute+$time_step,0,$month,$day,$year)) 
{
$hour = date('H',$date);
$minute = date('i',$date);
$second = date('S', $date);
$day = date('d',$date);
$month = date('m',$date);
$year = date('Y',$date);
?>

<?php

$Ensoleillement_Query = mysql_query("SELECT Moyenne, @row := @row + 1 AS ROW FROM mesure_ensoleillement,(SELECT @row := 0) r WHERE IdMesure  IN(SELECT IdMesures FROM mesures WHERE IdPasserelle='".$PERSIL."' and  ColonneEnregistrement='IdEnsoleillement')
and hour(DateMesure)= ".$hour."
and minute(DateMesure) = ".$minute."
and year(DateMesure)= ".$year."
and month(DateMesure)= ".$month."
and day(DateMesure)= ".$day." LIMIT 1 OFFSET ".$offset1." ");

if (!$Ensoleillement_Query) {
    die('Query failure Query: ' . mysql_error());
} 

if(mysql_num_rows($Ensoleillement_Query) == 0)  die("There is no Data in the Database corresponding to that date or site");

$Ensoleillement[$i] = mysql_result($Ensoleillement_Query,0,0);
$offset1 = mysql_result($Ensoleillement_Query,0,1);
$offset1 = $offset1-1;

}

最佳答案

LIMIT 影响读取数据的性能。让我们举个例子:

有人给你一份报纸并说“读完所有内容,然后告诉我第三页是什么”。或者他可以说“只读第三页并告诉我”。最后一个是限制的工作原理。您会更快地完成工作,因为您不会尝试阅读最终不需要的内容。

现在想象一下这个人就在你的房间对面,他需要走到你身边把报纸递给你。无论你读多少报纸,步行过去所花费的时间都是一样的。 LIMIT 对此没有影响。为了使人走得更快(完成类比),您可以添加索引或以其他方式优化查询。

关于php - LIMIT 和 OFFSET 可以帮助减少大表的执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15664338/

相关文章:

php - 在子文件夹中定义 Laravel 5 路由并通过 Controller 显示它

php - 具有一个值和另一个值的记录之间的 TIMEDIFF(),而不仅仅是一个

mysql - 你如何访问 ruby​​ on rails 2 中的 bit mysql 数据类型?

php - 使用 PHP、MySQL 的单个查询中的两个函数

php - 更改 silverstripes 'mysite' 文件夹的名称

php - mysql 中的数据透视表

ON DELETE CASCADE 的 MySQL 语法错误 #1064

mysql - 使用 SQL 触发器设置类别嵌套路径

mysql - where 子句中的计算列 - 性能

mysql - PowerShell MySQL 转储脚本未正确转储