6

SELECTPHPページにいくつかのステートメントがあり、Dreamweaverを使用してそれらを生成しました。

生成されたコードを調べた後、ほとんどの状況で切り取ることができる綿毛がたくさんあるように見えましたmysql_num_rows()。各ステートメントの行が例です。

ですから、これが実際にリソースを節約するかどうかを誰かに教えてもらえるのではないかと思います。クエリが実行されていることを考えると、これに実際のオーバーヘッドはありますか?


更新:マイクロタイムに関するChriszumaの提案に従った後、私の結果は次のとおりです。

//time before running the query
1: 0.46837500 1316102620

//time after the query ran
2: 0.53913800 1316102620

//time before calling mysql_num_rows()
3: 0.53914200 1316102620

//time after mysql_num_rows()
4: 0.53914500 1316102620 

オーバーヘッドはそれほど多くないようです

4

2 に答える 2

4

mysql_num_rows() は、フェッチされた後に行をカウントします。すべての行を取得して PHP 配列に格納し、count($array). ただし、mysql_num_rows() は MySQL クライアント ライブラリ内の C で実装されているため、同等の PHP コードよりも少し効率的です。

mysql_num_rows() が機能するためには、クエリの完全な結果が PHP のメモリ空間にある必要があることに注意してください。そのため、クエリの結果セットが大きくなり、多くのメモリを消費する可能性があるという意味でオーバーヘッドがあります。

于 2011-09-15T16:03:42.693 に答える
3

このような呼び出しがパフォーマンスに与える影響はごくわずかであると予想されます。内部に保存されたクエリ結果の行をカウントしているだけです。SQL クエリ自体が処理時間の大部分を占めます。

確実に知りたい場合は、呼び出しの前後にmicrotime()を実行して、正確な時間を確認できます。

$startTime = microtime(true);
mysql_num_rows();
$time = microtime(true) - $startTime;
echo("mysql_num_rows() execution: $time seconds\n");

私の疑いでは、マイクロ秒の範囲で何かが表示されるということです。

于 2011-09-15T15:55:48.947 に答える