Wenn die richtige Zeit ist, um die SQL-Anweisung zu verwenden „SELECT [Ergebnisse] FROM [Tabellen] WHERE [Bedingungen] FETCH FIRST [n] ROWS ONLY“

StackOverflow https://stackoverflow.com/questions/400575

  •  03-07-2019
  •  | 
  •  

Frage

Ich bin mir nicht ganz sicher, wenn nur eine bestimmte Anzahl von Zeilen der Auswahl wäre besser, als nur ein spezifischere select Statement. Ich habe ein Gefühl, das ich etwas ziemlich geradlinig bin fehlt, aber ich kann es nicht herausgefunden. Ich habe weniger als 6 Monate Erfahrung mit jeder SQL und es an, dass oberflächlicher gewesen, so tut mir leid, wenn dies eine wirklich einfache Frage, aber ich konnte keine klare Antwort finden.

War es hilfreich?

Lösung

Ich kenne zwei gemeinsame Verwendungen:

Paging: sicher sein, eine Ordnung zu geben. Wenn eine Bestellung nicht angegeben ist, verwenden viele db-Implementierungen, was für die Ausführung der Abfrage bequem ist. Dieses „optimales“ Bestellverhalten sehr unvorhersehbare Ergebnisse führen könnte.

SELECT top 10 CustomerName
FROM Customer
WHERE CustomerID > 200 --start of page
ORDER BY CustomerID

Unterabfragen: viele Orte, die eine Unterabfrage ausgegeben werden kann verlangen, dass das Ergebnis ein einzelner Wert ist. Top-1 ist nur schneller als max in vielen Fällen.

--give me some customer that ordered today
SELECT CustomerName
FROM Customer
WHERE CustomerID =
(
  SELECT top 1 CustomerID
  FROM Orders
  WHERE OrderDate = @Today
)

Andere Tipps

Benutzerdefinierte Paging, in der Regel.

Wir sind mit der Anweisung aus den folgenden Gründen:

  1. Nur die relevantesten Ergebnisse (sagen die Top-100) ohne alle Zeilen aus der DB an den Client übertragen zu müssen. In diesem Fall verwenden wir auch ORDER BY.

  2. Wir wollen nur wissen, ob es passende Zeilen sind und haben ein paar Beispiele. In diesem Fall bestelle wir nicht die Ergebnisse wieder, FETCH FIRST viel mehr billig ist die DB vorbereiten viele Zeilen übertragen und sie dann auf dem Client als mit wegzuwerfen. Dies ist in der Regel während der Entwicklung Software, wenn braucht ein Gefühl dafür zu bekommen, wenn eine bestimmte SQL richtig ist.

Wenn Sie die Werte für einen Benutzer angezeigt werden sollen, sind Sie wahrscheinlich nur N Zeilen müssen. Im Allgemeinen ist die Datenbankserver die ersten N Zeilen abrufen kann, schneller als es alle Zeilen holen können, so dass Ihr Bildschirmneuzeichnen ein wenig schneller gehen kann.

Oracle hat sogar einen Hinweis, genannt FIRST_ROWS, die diese Daten immer wieder schnell schlägt, was noch wichtiger ist, dass sie alle wieder effizient zu bekommen.

Die Designer von SQL stimmen mit Ihnen überein, weshalb Standard-SQL nicht oben nicht enthalten / Limit / holt erster, etc.

Denken Sie Google-Suchergebnisse und die Anzahl der Seiten gibt es typischerweise für die Ergebnisse.

offensichtlich Obwohl, es gibt viel mehr, um es in ihrem Fall aber das ist die Idee.

Abgesehen von Paging, jedes Mal, wenn die meisten oder am wenigsten wollen [einfügen metrisch hier] Zeile aus einer Tabelle, die Bestellung auf [was auch immer metrisch] und 1 Zeile zu begrenzen ist, IME, besser als eine Unterabfrage zu tun mit MIN / MAX. variiert von Motor.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top