0

(パフォーマンス面で)の違いは何ですか

$var = mysql_query("select * from tbl where id='something'");

$count = mysql_num_rows($var);

if($count > 1){

    do something

}

$var = mysql_query("select count(*) from tbl where id='somthing'");

PS:mysql_*が非推奨になっていることは知っています。

4

7 に答える 7

3

最初のバージョンは、結果セット全体を返します。テーブルが広い場合、これは大量のデータになる可能性があります。にインデックスがある場合idでも、元のデータを読み取って値を入力する必要があります。

2番目のバージョンは、カウントのみを返します。にインデックスがある場合は、インデックスidを使用し、データページからデータを読み込む必要はありません。

データではなくカウントのみが必要な場合は、2番目のバージョンの方が明確であり、パフォーマンスが向上するはずです。

于 2013-03-20T13:43:34.513 に答える
1

私は2つの理由で2番目を使用します:

  • あなたが述べたように、mysql_*は非推奨です
  • テーブルが巨大な場合は、それを数えるためだけにかなりの量のデータを$varに入れています。
于 2013-03-20T13:43:27.477 に答える
1

select *mysqlに(条件が与えられた場合)そのテーブルからすべてのデータをフェッチして提供するように要求していますが、これはあまり最適化されていない操作であり、多くのデータが整理され、ソケットを介してPHPに送信されます。

その後、このデータに対して何もしないので、mysqlに大量のデータ処理を無料で行うように依頼しました。

代わりに、条件に適合する行数をmysqlに要求するだけcount()では、すべてのデータを送信しようとすることはなく、特にidフィールドにインデックスが付けられている場合は、クエリが高速になります。

ただし、全体として、phpアプリケーションがまだ単純でありながら、優れたプラクティスである場合、これはマイクロ最適化と見なされる可能性があります。

于 2013-03-20T13:45:26.673 に答える
1

SELECT * FROM tbl_university_master;

2785行が返されました

実行時間:0.071秒

転送時間:7.032秒

合計時間:8.004秒


SELECT COUNT(*)FROM tbl_university;

1行が返されました

実行時間:0.038秒

転送時間:0秒

合計時間:0.039秒

于 2013-03-20T13:54:09.080 に答える
0

1つ目は、すべてのデータを収集し、結果セットの行数をカウントします。これは、パフォーマンスを重視します。後者は、はるかに高速なクイックカウントを実行します。

ただし、データとカウントの両方が必要な場合は、カウントmysql_num_rowsを行うためにさらに別のクエリを実行するよりも、最初のクエリを実行して(またはPDOで同様のものを)使用する方が賢明です。

そして実際、mysql_*は非推奨になります。ただし、MySQLiまたはPDOを使用する場合も同じです。

于 2013-03-20T13:43:30.890 に答える
0

使っていると思います

$var = mysql_query("select count(*) from tbl where id='somthing'");

MySQLから返される行数に基づいてメモリを割り当てないため、より効率的です。

于 2013-03-20T13:47:21.163 に答える
0

select * from tbl where id='something'ID条件のテーブルからすべてのデータを選択します。

このCOUNT()関数は、指定された基準に一致する行数を返します。

読書、練習、デモンストレーションの詳細については、 =>>> w3schoolsをご覧ください 。

于 2013-03-20T13:49:24.310 に答える