2016-08-04 21 views
-1

Was ist der schnellste Weg zu prüfen, ob ein Datensatz in db vorhanden ist, der für Oracle, MySQL und Postgres gelten soll.Schnellste "GENERIC" Möglichkeit zu prüfen, ob ein Datensatz in db existiert?

Gemäß diesem Link: Fastest way to determine if record exists, können wir die top Klausel verwenden, aber oben ist nicht in Oracle verfügbar. Ich möchte nicht verschiedene Abfragen für verschiedene dbs haben.

Also, was wäre die beste generische Abfrage zu prüfen, ob Datensatz in db existiert?

+0

Ich bin mir nicht sicher, es gibt eine völlig generische Art und Weise [abgesehen davon] (http://stackoverflow.com/q/9026184/266304). Oracle hat "exists" von dir muss aus dual auswählen, was nicht generisch ist. Viele ähnliche Fragen wurden schon vorher gestellt ... –

Antwort

0

Es gibt wahrscheinlich keinen schnellen generischen Weg, weil die SQL-Dialekte zu unterschiedlich sind. Eine, die immer funktionieren wird, ist

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

Wenn die Datenbank sehr klug ist (nicht getestet falls vorhanden ist), es könnte herausfinden, dass es nach dem ersten Datensatz gefunden zu stoppen; aber wenn nicht count(*) könnte schneller sein.

Eine andere Idee ist, einen Cursor in Ihrer Programmiersprache zu verwenden und nur 1 Zeile abzurufen. Intelligente Datenbanken (wie PostgreSQL) werden herausfinden, dass sie einen Plan wählen sollten, der die ersten Zeilen schnell bekommt.

0

In Postgresql:

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

Generika mit limit:

select 1 
from t 
where column = value 
limit 1 

Mit select 1 (oder eine Konstante) in statt select * sucht ein Index nur zulassen, wenn die Datenbank diese Fähigkeit hat.

+0

'limit' ist nicht generisch - Oracle unterstützt das nicht (auch in 12c ist die Syntax anders). –