3

天気のレコード数が 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) 他に最善の方法はありますか?

4

5 に答える 5

4

最初に、mysql は COUNT( * ) 用に最適化されているため、COUNT(fieldname) の代わりに COUNT( * ) を使用します。

次に、テーブルが非常に大きい場合は、実行速度を上げるために WHERE 句の列にインデックスがあることを確認してください。

于 2013-05-22T10:36:12.130 に答える
0

この方法で投稿した両方のコードを自分で確認できます。

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

1回の使用では2番目の方が経済的だと思いますが、値を反復処理する必要がある場合は、準備されたステートメントの方が優れています。

于 2013-05-22T10:45:23.783 に答える
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

}
于 2013-05-22T10:36:06.957 に答える
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

また、どちらが最速ですか?SELECT SQL_CALC_FOUND_ROWS FROM `table` または SELECT COUNT(*)

于 2013-05-22T10:36:53.450 に答える