2011-09-15 22 views
6

私はPHPページにいくつかのSELECTステートメントを持っています。それらを生成するためにDreamweaverを使用しました。mysql_num_rows()php - 効率的ですか?

コードが生成された後、ほとんどの状況下で私が切り捨てることができる綿毛がたくさんあるように見えましたが、各ステートメントの例文の行はmysql_num_rows()です。実際のオーバーヘッドは、このためにそこにあるに関わらず、実行されているクエリを考慮 - 誰もが、これは実際にリソースを節約するかどうか私に言うことができるかどう

だから私は思ったんだけど?


UPDATE: 微小時間程度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 

はそうではない多くのオーバーヘッドがすべてで、私が期待する

+0

そんなにコードを書いていた間、私は迅速かつ汚いテストをしたが、これは働いていたがそこPHPの関数呼び出しのオーバーヘッドは常にあるが、あなたは何百何千回ものそれを呼び出していない限り、それは、通常は最小限である... – DaveRandom

答えて

3

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

あなたは確かに知りたい場合は、あなたはそれが取っている正確にどのくらい見に呼び出しの前と後のmicrotime()を実行することができます。

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

私の疑惑は、あなたがマイクロ秒の範囲内のものが表示されることです。

+1

たびにmicrotime()を呼び出します:) – jammypeach

4

mysql_num_rows()は、の後に行をカウントします。すべての行をフェッチしてPHP配列に格納した後、count($array)を実行したようなものです。しかし、mysql_num_rows()はMySQLクライアントライブラリの中でCで実装されているので、同等のPHPコードよりも少し効率的です。 mysql_num_rowsために()が動作するために、あなたはPHPのメモリ空間でクエリの完全な結果を持っている必要があります

注意。そのため、クエリ結果セットが大きくなり、大量のメモリを占有するというオーバーヘッドがあります。

+1

+1 [mysql_unbuffered_query](http://php.net/manual/en/function.mysql-unbuffered-query)を使用すると、mysql_num_rowsが機能しません。 PHP) – webbiedave