在MySQL + PHP中计算记录的最佳实践

时间:2013-05-22 10:32:32

标签: php mysql database query-optimization

我想查看记录的天气数> 15条件。

加快查询速度的最佳做法是什么?

1)

$query="SELECT `id` FROM `table` WHERE `name`='$name' AND `usage` > '$limit'";
$result=mysql_query($query);       
if(mysql_num_rows($result) >15) 
{
    //do task

}

2)

$query="SELECT COUNT(1) AS 'cnt' FROM `table` WHERE `name`='$name' AND `usage` > '$limit'";

$result=mysql_query($query); 
$row = mysql_fetch_assoc($result);

if($row['cnt'] >15) 
{
    //do task

}

3)任何其他最佳方式?

5 个答案:

答案 0 :(得分:4)

首先,使用COUNT(*)而不是COUNT(fieldname),因为mysql针对COUNT(*)进行了优化。

其次,如果表非常大,那么请确保在WHERE子句中的列上有索引以加快执行速度。

答案 1 :(得分:0)

你可以用

$query="SELECT COUNT(id) as cnt FROM `table` WHERE `name`='$name' AND `usage` > '$limit'";

$result=mysql_query($query); 
$row = mysql_fetch_assoc($result);

if($row['cnt'] >15) 
{
    //do task

}

答案 2 :(得分:0)

试试这个,

$query="SELECT SQL_CALC_FOUND_ROWS `id` FROM `table` WHERE 
         `name`='$name' AND `usage` > '$limit'";
$result=mysql_query($query);       
if(mysql_num_rows($result) >15) 
{
    //do task
}

对于总行数,请使用

$resultTotal=mysql_query("SELECT FOUND_ROWS()");

阅读此http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

Which is fastest? SELECT SQL_CALC_FOUND_ROWS FROM `table`, or SELECT COUNT(*)

答案 3 :(得分:0)

您可以自己检查以这种方式发布的代码:

$mt=microtime(true);
/* your code */
$qt=microtime(true)-$mt;
print "time elapsed: " . number_format($et) . "s\n";

我认为一次性使用第二次会是经济的,但如果你必须重复这些价值,准备好的陈述会更好。

答案 4 :(得分:0)

显然,第二个更好。在第一次查询时,Mysql尝试考虑一些系统资源来获取id列作为$result的结果集,特别是在大量数据中,这将是一个重要的有更多时间执行查询的原因。 但在第二个查询中,它只是分配一个计数器变量,如cnt,用于显示计数记录。

另请注意,COUNT(id)不会计算NULL个值。然后,如果id可以根据定义设置为NULL,则最好使用COUNT(*)或根据您的选择来计算NULL值。