2011-09-27 12 views
6

私はそのエントリが存在してチェックする最速の方法を探しています...そのエントリがデータベースに存在することを確認する最速の方法は何ですか?

すべての私の人生は、私は、...このようなもので

SELECT COUNT(`id`) FROM `table_name` 

一部の人々はCOUNT(id)を使用していないをしましたCOUNT(*)。それはより速いのですか?

LIMIT 1

P.S. idとはもちろん、私は主キーを意味しました。

アドバイスをいただきありがとうございます。

+0

SELECT COUNT(1)FROM table_name –

+3

を使用することをお勧めします。行をチェックする最速の方法は、テーブルまたは高速データベース内のテーブルの行数が0より大きいかどうかを確認するには? –

答えて

7

COUNT(*)があるためどのようにグループ化クエリCOUNT()としているの(MySQLでCOUNT(id)よりも高速である場合には疑問があります、両方のバージョンが同じように動作するように、将来のリリースで最適化されるかもしれません)。少なくとも一つの行が存在する場合にのみ検索したい場合しかし、あなたは使用することができますEXISTS

シンプル:

少し速く
(SELECT COUNT(id) FROM table_name) > 0 

(SELECT COUNT(*) FROM table_name) > 0 

ずっと速い:

EXISTS (SELECT * FROM table_name) 
+0

これらの例で 'WHERE' x' = 'abc''を使用できますか? 'LIMIT 1'はどうですか?たぶんパフォーマンスが向上するのでしょうか? – daGrevis

+0

これらの内の任意の複雑な条件(WHERE、複数のJOIN)を使用できます。 'id'がヌル入力可能でない場合、3つはすべて同等です(どちらも同じ状況でTRUEまたはFALSEを返します)。 –

+1

'EXISTS'は実際に' LIMIT 1'のように動作します。条件に一致する1つの行が見つかると、より多くの検索を停止します。 –

5

精度が心配されていない場合、explain select count(field) from tableは信じられないほど速いです。

http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/

このリンクは、count(*)count(field)の違いを説明しています。テーブルが空でないことをチェックするためとして

count(*) ...ほとんどの状況で

SELECT EXISTS(SELECT 1 FROM table)

関連する問題