街中で見かけて「グッときた人」の思い出

どちらの処理が早くなりますか?またメモリの使用量はどちらが優れているのでしょうか?
また、方法Bのクエリ実行は2回だと思いますが、方法Aはクエリの実行は一回と考えてもいいのでしょうか?

PHPとMySQLの環境です。
また、評価のやり方も教えて頂ければ大変ありがたいです。

■方法A
$q = "SELECT key, a, b, c FROM d WHERE a < 1 AND b > 1 ORDER BY c";
$rs = mysql_query ($q);
$row_num = mysql_num_rows ($rs);
while ($data = mysql_fetch_array ($rs)) {
echo $data[key] . $data[a] . $data[b] . $data[c];
}

■方法B
$q_c = "SELECT COUNT(key) AS count FROM d WHERE a < 1 AND b > 1";
$rs = mysql_query ($q_c);
$data = mysql_fetch_array ($rs);
$row_num = $data[count];

$q = "SELECT key, a, b, c FROM d WHERE a < 1 AND b > 1 ORDER BY c";
$rs = mysql_query ($q);
while ($data = mysql_fetch_array ($rs)) {
echo $data[a] . $data[b] . $data[c];
}

是非宜しくお願い致します。

A 回答 (1件)

技術的な裏付けはわかりませんが、そんなには変わる要素はなさそうですね


カウント数をとるなら普通はCOUNT()なのでB案の方がなにかとよろしいかと思います

根拠として通常全件表示は冗長なのでおこなわないケースが多く
たいていページングで範囲を限定して表示するからです。
カウントは全件、表示箇所は限定(たとえばLIMITするとか)となると
件数確認と表示は別で処理した方が効率がよくなります

この回答への補足

方法Cも加え、処理の時間を計測をしましたが、私の場合だとcount()が一番早くなりました。

■方法C
SELECT SQL_CALC_FOUND_ROWS

補足日時:2011/04/27 15:29
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはりcount()の方ですか。パフォーマンス計測も調べてやってみたいと思います。

お礼日時:2011/04/27 14:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!