2016-08-04 5 views
-1

oracle、mysql、およびpostgresに適用されるレコードがdbに存在するかどうかを確認する最速の方法は何ですか?dbにレコードが存在するかどうかを調べる最速の「GENERIC」方法ですか?

Fastest way to determine if record existsとして、top句を使用できますが、topはoracleで使用できません。私は異なったdbsのための異なった質問を持ってほしくない。

したがって、dbにレコードが存在するかどうかを確認する最も一般的なクエリは何ですか?

+0

完全に一般的な方法[これとは別に](http://stackoverflow.com/q/9026184/266304)があるかどうかはわかりません。オラクルには「存在する」というものがあります。これは、一般的ではないデュアルから選択する必要があります。しかし、多くの同様の質問が以前に尋ねられました。 –

答えて

0

SQLの方言があまりにも異なるため、おそらく一般的な方法はありません。常に動作します一つは、データベースが(いずれかである場合にはテストされていません)非常にスマートである場合、それは最初のレコードが見つかった後、それが停止することを考え出すかもしれません

SELECT min(field) FROM mytable WHERE field = ?; 

です。そうでない場合は、count(*)がより速いかもしれません。

もう1つの考え方は、プログラミング言語でカーソルを使用し、1行だけをフェッチすることです。 PostgreSQLのようなスマートデータベースは、最初の数行をすばやく取得するプランを選択する必要があることがわかります。 PostgreSQLで

0

limitを用い

select exists (select 1 from t where column = value); 

汎用:

select 1 
from t 
where column = value 
limit 1 

select 1(または任意の定数)を使用して代わりのselect *では、データベースがその能力を持っている場合、インデックスのみを検索できるようになります。

+0

'limit'は一般的ではありません - オラクルはそれをサポートしていません(12cでも構文は異なります)。 –

関連する問題