1

データベースに特定のエントリが存在するかどうかを確認したい場合、2 つのオプションがあります。

COUNT() を使用して SQL クエリを作成し、結果が >0 かどうかを確認できます...

...または、レコードを取得して、返された行セットの行数を数えることもできます。たとえば、$result->num_rows; を使用します。

何が良い/速いですか?mysqlで?一般に?

4

8 に答える 8

2

YMMV ですが、存在を確認するだけで、取得したデータをまったく使用する必要がない場合は、COUNT() クエリの方が高速になると思います。どれだけ速くなるかは、データの量によって異なります。

于 2008-12-03T15:49:20.917 に答える
2

最も速いのは、おそらく何かが存在するかどうかをデータベースに尋ねることです。

SELECT EXISTS ([your query here])
于 2008-12-03T15:49:34.533 に答える
1

私にとってはデータベースにあります。

$result->num_rows では、2 つの操作を 1 つの選択にし、選択にカウントがある場合はカウントを行う方が結果を取得する方が速いため、count(1) を作成する方が $result->num_rows よりも高速です。データベースからの情報も必要な場合を除きます。

于 2008-12-03T16:07:03.783 に答える
1
SELECT 1 
  FROM (SELECT 1) t 
 WHERE EXISTS( SELECT * FROM foo WHERE id = 42 )

テスト済み、MySQL v5 で正常に動作

次の場合、COUNT(*) は一般に効率が低下します。

  1. 重複する可能性があります (DBMS がすべてのレコード/インデックスを徹底的に検索して正確な答えを得る必要があるため)、または
  2. NULL エントリがある (同じ理由で)

単一のレコード (または 0) を生成することが保証されている WHERE 句に基づいて COUNT を実行しており、DBMS がこれを (UNIQUE インデックスに基づいて) 認識している場合、同様に効率的であるはずです。しかし、常にこの状態にあるとは考えにくいです。また、バージョンと DBMS によっては、DBMS が常にこれを検出するとは限りません。

アプリケーションでのカウント (行が必要ない場合) は、ほとんどの場合、遅くなる/悪化することが保証されています。

  1. クライアントにデータを送信する必要があり、クライアントはそれをバッファリングして何らかの作業を行う必要があります
  2. DBMS の MRU/LRU データ キャッシュで、より重要なものが発生する可能性があります。
  3. DBMS は (通常) 使用しないレコード データを取得するために、より多くのディスク I/O を実行する必要があります。
  4. より多くのネットワーク アクティビティがあります

もちろん、行が存在する場合に何かを実行したい場合は、最初に行を取得して取得する方が確実に高速/最善です!

于 2008-12-03T16:11:14.523 に答える
1

存在を確認するだけなら、

Select count(*) ...

ただし、データが存在する場合にデータを取得する場合は、データを取得して PHP で確認するだけです。それ以外の場合は、2 つの呼び出しが必要になります。

于 2008-12-03T16:03:29.390 に答える
0
SELECT COUNT(*) FROM table

が最良の選択です。この操作は、小さなテーブルでも大きなテーブルでも非常に高速です。それは可能ですが、

SELECT id FROM table

小さなテーブルの方が速いため、速度の違いは微視的です。ただし、テーブルが大きい場合、この操作は非常に遅くなる可能性があります。

したがって、最善の策は、常に を選択することです (特定の を選択するよりもCOUNT(*) the table実行する方が高速です)。全体として、それが最速の操作になります。*column

于 2008-12-03T15:59:16.560 に答える
0

生の速度が必要な場合は、ベンチマークしてください! 他の人が提案した方法に加えて:

SELECT 1 FROM table_name WHERE ... LIMIT 1

副選択を回避するため、より高速になる可能性があります。それをベンチマークします。

于 2008-12-03T16:55:29.330 に答える
-1

データベースの負荷を減らすために、私は間違いなくPHPでそれを行います。

カウント取得し、返された行を SQL で取得するには、2 つのクエリを実行する必要があります..COUNT と SELECT です。

PHP の方法では、1 つの結果オブジェクトで必要なものがすべて提供されます。

于 2008-12-03T15:50:55.670 に答える