COUNT(*)
MySQL では、実際に行をフェッチするために SELECT * を実行する必要があるかどうかを判断するために常に最初に実行するのが一般的に良い考えSELECT *
ですか?
6 に答える
問題のテーブルをロックしない限り、 a を実行しても意味がありませんselect count(*)
。検討:
プロセス 1:
SELECT COUNT(*) FROM T;
プロセス 2:
INSERT INTO T
プロセス 1:
...now doing something based on the obsolete count retrieved before...
もちろん、テーブルをロックすることは、サーバー環境ではあまり良い考えではありません。
番号が必要かどうかにもよりますが、特に、IIRCmysql
があります。calc_found_rows
ドキュメントを調べてください。
常にSELECT [field1, field2 | *] FROM.... The SELECT COUNT(*)
コードを肥大化させ、追加のトランスポートとデータのオーバーヘッドを追加し、通常は保守できなくなります。
一部の db ドライバーの実装では、レコード自体を返す select ステートメントに対して実際に選択された行の数が返されない場合があります。事前に発行された「count(*)」は、実際のデータを選択する前に結果のレコードセットの正確なサイズを知る必要がある場合に役立ちます。
フォームは 2 クエリ、後者は 1 クエリです。各クエリは、データベース サーバーと通信する必要があります。計算する。
答えは、この種の質問の多くと同様、「場合による」です。すべきでないことは、テーブルにインデックスがないときにこれら 2 つのクエリを実行することです。一般に、COUNT だけを実行するのは IO 時間の無駄なので、この操作がほとんどの場合に IO に費やされる時間を節約するのに役立つ場合は、オプションになる可能性があります。