Hier im Forum bekommt ihr bei euren fragen schnelle hilfe.Hier geht es rund um das Web SeitenProgrammieren.Alles rund ums Javascript,Html,Php,Css und Sql.Auf fast allen Fragen haben wir eine Antwort.
Der Soforthilfe-chat verspricht das ,was sein Name sagt. Hier sind Leute Online die sofort ihre hilfe anbieten.Seht in der OnlineListe nach und wenn einer Online ist werdet ihr auch antwort bekommen. Admine ,Moderatoren und Helfer sind unsere Spezialisten in Sachen Web Programierung
71 Unwetterwarnungen in Deutschland
Die Datenbank wurde zuletzt am 02.08.2020 17:34:28 aktualiesiert
71

Schlamperei mit „SELECT *“

Das Selektieren von Datensätzen gehört in MySQL zur Tagesordnung. Und trotzdem kann dabei performance-technisch viel falsch gemacht werden (Stichwort richtiger Einsatz von Indizes). Doch bevor man Indizes setzt, sollte man sich auf die absoluten Grundlagen konzentrieren (obwohl Indizes wohl auch dazu gehören ???? )
Oft sieht man (besonders bei etwas unerfahreneren Entwicklern) die Datenbank-Abfrage

SELECT * FROM table WHERE spalte='wert'

Es geht insbesondere um das SELECT *. Diese Abfrage selektiert alle Spalten, in denen spalte=’wert‘. Oft werden allerdings nicht alle Spalten für die weitere Verarbeitung benötigt. Das ist das eine Problem vom Sternchen: unnötiger Speicherverbrauch und damit auch längere Laufzeit aufgrund von unnötig selektierten Spalten.
Wenn man nur von einer Tabelle selektiert ist das Problem schon schlimm, noch schlimmer wirds aber bei Joins, denn jede Extra-Spalte muss mitgejoint werden – ein enormer Zusatzaufwand.
Und selbst wenn sie (unwahrscheinlicherweise) alle Spalten benötigen, ist die Sternchen-Variante nicht zu empfehlen. Erstens können später im Zuge einer Erweiterung weitere Spalten zu der Tabelle hinzugefügt werden, die für die Verarbeitung der einen Stelle dann nicht mehr benötigt werden (womit wieder unnötig Speicher vergeudet wäre). Das zweite Problem ergibt sich aus dem folgendem Absatz.

Das zweite Problem beim Sternchen ist, dass MySQL erstmal nachsehen muss, welche Spalten denn überhaupt in der Tabelle enthalten sind. Das kostet (zwar nicht viel) ebenfalls Zeit.

<

Am Beispiel:

SELECT *   FROM `tabelle`   LIMIT 10000;  
    --Ergebnis in 0,1396 s    SELECT ID,titel,email   FROM `tabelle`   LIMIT 10000;  
    --Ergebnis in 0,0370 s

Die Sternchen Variante benötigt also ca 3,7 mal so lange wie das Selektieren der gewünschten Spalten. Der Faktor ist natürlich abhängig, wieviele unnötige Spalten man beim Selektieren eingespart werden können. Trotzdem zeigt dieses Beispiel eindrucksvoll, warum „SELECT *“ nicht verwendet werden sollte.

Merke: Immer nur die Spalten selektieren, die für die Verarbeitung auch benötigt werden !!!

Habe gerade noch ein schönes Bild zum Thema bei Techtalk gefunden:
SELECT * bringt nur Probleme