Ich habe einige Artikel gelesen, aber wirklich nicht verstanden, was zu select 1 from
tun ist. Jemand sagt "Sie sollten select 1
anstelle von verwenden select *
". Hier ist eine Beispieltabelle:
cust_id cust_name cust_address
1000000001 Village Toys Mapl
1000000002 Kids Place South
1000000003 Fun4All Sunny
1000000004 Fun4All Riverside
1000000005 The Toy Store 53rd
Was wird das Ergebnis sein, wenn ich schreibe, select 1 from customer_table
was macht diese Aussage?
sql-server-2008
Mehmet
quelle
quelle
select 1
anstelleselect *
einerEXISTS
Klausel einen Vorschlag zu machen . Der Optimierer wurde vor langer Zeit verbessert. Es war nie ein Ersatz für "Alle Spalten aus dieser Ergebnismenge abrufen".Antworten:
select 1 from table
gibt für jede Zeile in der Tabelle eine Spalte mit Einsen zurück. Sie können es mit einer where-Anweisung verwenden, um zu überprüfen, ob Sie einen Eintrag für einen bestimmten Schlüssel haben, wie in:
if exists(select 1 from table where some_column = 'some_value')
Was Ihr Freund wahrscheinlich gesagt hat, ist, dass Sie aus zwei Gründen genau die Spalten angeben sollten, die Sie genau benötigen, anstatt Massenauswahl mit select * from table zu treffen:
1) Leistung & Sie können mehr Daten abrufen, als Sie tatsächlich benötigen.
2) Der Benutzer der Abfrage kann sich auf die Reihenfolge der Spalten verlassen. Wenn Ihre Tabelle aktualisiert wird, erhält der Client Spalten in einer anderen Reihenfolge als erwartet.
quelle
Die Konstruktion wird normalerweise bei "Existenz" -Kontrollen verwendet
if exists(select 1 from customer_table where customer = 'xxx')
oder
if exists(select * from customer_table where customer = 'xxx')
Beide Konstruktionen sind äquivalent. In der Vergangenheit sagten die Leute, die Auswahl * sei besser, weil der Abfrage-Governor dann die am besten indizierte Spalte verwenden würde. Dies hat sich als nicht wahr erwiesen.
quelle
Es macht, was Sie fragen,
SELECT 1 FROM table
wird für jede Zeile in dieser TabelleSELECT
ein (zurückgeben)1
, wenn es 3 Zeilen in der Tabelle gäbe, die Sie erhalten würdenSchauen Sie sich Count (*) vs Count (1) an, was möglicherweise das Problem ist, das Sie beschrieben haben.
quelle
WHERE
Klausel wahr oder falsch ist. Es wird häufig in Unterabfragen verwendet.Die Anweisung gibt
SELECT 1 FROM SomeTable
nur eine Spalte zurück, die den Wert1
für jede Zeile in Ihrer Tabelle enthält. Wenn Sie eine weitere Spalte hinzufügen, z. B.SELECT 1, cust_name FROM SomeTable
wird dies etwas klarer:cust_name ----------- --------------- 1 Village Toys 1 Kids Place 1 Fun4All 1 Fun4All 1 The Toy Store
quelle
SELECT COUNT(*) in EXISTS/NOT EXISTS
EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS)
- DieEXISTS
Bedingung wird immer wahr zurückgegeben, unabhängig davon, ob die BEDINGUNGEN erfüllt sind oder nicht.NOT EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS)
- DieNOT EXISTS
Bedingung wird immer falsch zurückgegeben, unabhängig davon,CONDITIONS
ob sie erfüllt sind oder nicht.SELECT COUNT 1 in EXISTS/NOT EXISTS
EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)
- DieEXISTS
Bedingung wird true zurückgegeben, wenn sieCONDITIONS
erfüllt ist. Sonst falsch.NOT EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)
- DieNOT EXISTS
Bedingung gibt false zurück, wenn sieCONDITIONS
erfüllt ist. Sonst wahr.quelle