Frage

Wie viel von einem Performance-Vorteile ist es durch in Abfrage nur erforderlich Feld auswählen, anstatt die gesamte Zeile der Abfrage? Zum Beispiel, wenn ich eine Reihe von 10 Feldern, sondern brauchen nur 5 Felder in der Anzeige, es lohnt sich nur diejenigen 5 Abfragen? was ist mit dieser Einschränkung der Leistungsvorteil gegen das Risiko von Rücken und fügen Sie Felder in der SQL-Abfrage später mit gehen, wenn nötig?

War es hilfreich?

Lösung

Es ist nicht nur die zusätzlichen Daten Aspekt, die Sie berücksichtigen müssen. Auswählen aller Spalten wird die Nützlichkeit der Abdeckung Indizes, da ein Lesezeichen-Suche in den Clustered-Index (oder Tabelle) negieren erforderlich.

Andere Tipps

Es hängt davon ab, wie viele Zeilen ausgewählt werden und wie viel Speicher diese zusätzlichen Felder verbrauchen. Es kann viel langsamer laufen, wenn mehrere Text / Blobs Felder beispielsweise vorhanden sind, oder viele Zeilen ausgewählt werden.

Wie ist das Hinzufügen von Feldern später ein Risiko? Anfragen passen sie ändernden Anforderungen zu modifizieren Teil des Entwicklungsprozesses ist ein natürlicher.

Der einzige Vorteil, den ich kenne ausdrücklich Ihre Spalten in der SELECT-Anweisung zu benennen ist, dass, wenn eine Spalte der Code mit Ihrer select-Anweisung, bevor Ihr Code fehlschlagen wird umbenannt wird. Noch besser, wenn Ihre SELECT-Anweisung innerhalb einer Prozedur ist, Ihr proc und der DB-Skript würde nicht kompilieren. Das ist sehr praktisch, wenn Sie Tools wie VS DB Edition verwenden DB-Skripte zu erstellen / überprüfen. Andernfalls würde der Unterschied in der Leistung vernachlässigbar sein.

Die Anzahl der abgerufenen Felder ist ein Effekt zweiter Ordnung auf die Leistung in Bezug auf die großen Overhead der SQL-Anfrage selbst - aus Prozess geht, über das Netzwerk auf einen anderen Host und möglicherweise auf die Festplatte auf dem Host nimmt viele mehr Zyklen als ein paar zusätzlichen Bytes von Daten schaufeln.

Natürlich, wenn die zusätzlichen Felder umfassen ein Megabyte Blob ist die Gleichung verzerrt. Aber meine Erfahrung ist, dass die Transaktion Overhead von der gleichen Größenordnung ist, oder größer ist, als die retreived tatsächlichen Daten. Ich erinnere mich vage von vor vielen Jahren als eine „leere“ NOP TNS Anfrage etwa 100 Bytes auf dem Draht ist.

Wenn der SQL-Server nicht die gleiche Maschine, von der aus Sie die Abfrage, dann die zusätzlichen Spalten der Auswahl überträgt mehr Daten über das Netzwerk (die einen Engpass sein kann), nicht zu vergessen, dass es mehr Daten von der Platte zu lesen hat , mehr Speicher zuzuteilen, die Ergebnisse zu halten.

Es gibt nicht eine Sache, die ein Problem von selbst verursachen würde, aber die Dinge addieren und sie alle zusammen Probleme verursachen Leistung. Jedes bisschen hilft, wenn Sie eine Menge entweder Abfragen oder Daten haben.

Das Risiko, das ich denke, wäre, dass Sie die Felder in die Abfrage später möglicherweise hinzufügen müssen, die Codemittel zu ändern, aber dann müssen Sie in der Regel mehr Code hinzufügen ohnehin zusätzliche Felder zu behandeln.

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