Veröffentlicht 6. September 201311 j Hallo, sagen wir mal ich will eine Datenbanktabelle aufrufen, welche 0,5 mio Eiträge mit ca. 20 Attributen hat. wieviel zeit spart man, wenn man statt a) select * from tabelle select atr1, atr2, atr3 from tabelle verwendet? Ab wieviel Datenbankaufrufen sollte man unbedingt b Variante verwenden um Zeit und Performance unterschied zu spüren? Vielen Dank
6. September 201311 j Hi, ich behaupte mal, dass du gar nichts sparen wirst, denn das sind beide Full Table Scans, d.h. du rufst jedes Mal jeden Datensatz ab. Solange da keine where Klausel und ein Index existiert, dürfte das beides ähnlich lange dauern (außer vielleicht wenn du ne Ausgabe auf dem Bildschirm hast, der gepuffert werden muss, weil bei dem select *.... ja dann einfach mehr Daten angezeigt werden müssen.) EDIT: Ok, Letzteres betrifft natürlich auch den Netzwertraffic, wenn es nun 100 Spalten sind und du nur 2 brauchst, ist das natürlich unnötige Last. Bearbeitet 6. September 201311 j von carstenj
6. September 201311 j Autor sorry, habe den Befehl nicht voll ausgeschrieben where Klausel wäre dabei und würde am ende 0 bis 10 Treffer liefern . so in etwa: select atr1, atr2, atr3 from tabelle where id= '1234'.
6. September 201311 j ... naja, bei bis zu 10 Treffern ist die Datenmenge, die über das Netz geht nicht so groß... abhängig davon, wieviele Spalten du davon hast... eine Selektion auf dei benötigten Spalten macht aber in jedem Fall Sinn, da du ja nur wirklich das lädst, was du auch brauchst. Das Netzwerk wird es dir später danken...
6. September 201311 j Schau dir mal den logischen ablauf eines queries an, dann siehst du wann der eigentliche select ausgefuehrt wird, zumindest bei mssql. SQL SERVER – Logical Query Processing Phases – Order of Statement Execution | Journey to SQL Authority with Pinal Dave Sprich dein ergebnis set nach der where auswertung muss schon recht gross bleiben, damit du viel unterschied spuerst.
13. September 201311 j Ab wieviel Datenbankaufrufen sollte man unbedingt b Variante verwenden um Zeit und Performance unterschied zu spüren? Unabhängig von der Performance solltest Du in produktivem Code auf SELECT * generell verzichten (außer Du machst das ganz bewußt und bist dir auch im klaren darüber warum), denn wenn sich die Tabelle ändert (neue Spalten etc) werden diese ohne dein Zutun ebenfalls mitselektiert. Wie Dein Programm dann darauf reagiert ist erstmal undefiniert. Des weiteren wird sofort aus dem Statement ersichtlich, welche Spalten du wirklich benötigst.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.