我想查看记录的天气数> 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)任何其他最佳方式?
答案 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
值。