Ich habe mal eine ziemlich gute Erklärung gefunden wie ein Mysql Query,
hauptsächlich SELECT, im Detail abläuft.
Also was zuerst kommt, JOIN , ORDER BY, GROUP BY, Subqueries etc. und in
welcher Reihenfolge mysql das abarbeitet.
Und vor allem das auch manchmal die Reihenfolge der Befehle wichtig ist.
Wenn ich mache
SELECT Count(Wohnsitze), name from Adresse
ist das was anderes als
SELECT name, Count(Wohnsitze) from Adresse
Gibt es dafür eventuelle gute Charts, die das erklären?
Was macht mysql in einer query zuerst, was danach, wie wird es
zusammengesetzt, etc.
Abradolf L. schrieb:> Roman schrieb:>> Was macht mysql in einer query zuerst, was danach, wie wird es>> zusammengesetzt, etc.>> EXPLAIN
Sagt mir jetzt nichts wirklich, wenn ich das davor schreibe.
Schreibt mir dann auch nur rätselhafte Sachen hin.
Roman schrieb:> Abradolf L. schrieb:>> Roman schrieb:>>> Was macht mysql in einer query zuerst, was danach, wie wird es>>> zusammengesetzt, etc.>>>> EXPLAIN>> Sagt mir jetzt nichts wirklich, wenn ich das davor schreibe.> Schreibt mir dann auch nur rätselhafte Sachen hin.https://dev.mysql.com/doc/refman/8.0/en/using-explain.html
Damit kriegst du den Ablaufplan und erfährst wie mysql eine konkrete
Query aufteilt und ausführt.
Roman schrieb:> Ich habe mal eine ziemlich gute Erklärung gefunden wie ein Mysql Query,> hauptsächlich SELECT, im Detail abläuft.>> Also was zuerst kommt, JOIN , ORDER BY, GROUP BY, Subqueries etc. und in> welcher Reihenfolge mysql das abarbeitet.> Und vor allem das auch manchmal die Reihenfolge der Befehle wichtig ist.>> Wenn ich mache> SELECT Count(Wohnsitze), name from Adresse> ist das was anderes als> SELECT name, Count(Wohnsitze) from Adresse>> Gibt es dafür eventuelle gute Charts, die das erklären?> Was macht mysql in einer query zuerst, was danach, wie wird es> zusammengesetzt, etc.
Try this:
Simple is: select > attribute > from > table > where > condition.
complex is: select > attribute > from > table > join > left or right
etc. > where > order by is last.
>Wenn ich mache>SELECT Count(Wohnsitze), name from Adresse>ist das was anderes als>SELECT name, Count(Wohnsitze) from Adresse
Warum soll das was unterschiedliches im Zugriffsplan der DB bewirken
(auser daß die Spalten miteinander vertauscht ausgegeben werden).
Jens G. schrieb:> Warum soll das was unterschiedliches im Zugriffsplan der DB bewirken> (auser daß die Spalten miteinander vertauscht ausgegeben werden).
...weil in einem möglichen vorhandenen Index die Reihenfolge der Spalten
eine Rolle spielen könnte!
Hi. je nachdem wie "Wohnsitze" angelegt ist ..
Die Count Funktion wird natürlich anders abgefrat als ein simples
"Textfeld" (vermutlich varchar) wie Name.
Eine Funktion wie Count "arbeitet" dementsprechend mehr.
Nur eine Vermutung : Wenn im Textfeld "Wohnsitze" eh nur eine Steht,
wird zwar die Funktion evaluiert, dürfte aber immer eine 1 zurückgegebn
oder ?
Anders ist es, wenn das Feld als ENUM benutzt wird und dort eine
Aufzählung der einzelnen Wohnsitze z.B. als Adress-Strings hinterlegt
wird. Das wäre aber für sowas extrem unsauber, ENUMS nimmt man nur für
kleine übersichtliche Aufzählungsarten ...
Dein o.g. Beispiel sollte am Ende eigneltich dasselbe Result-Set
ergeben, aber in jeweils anderer Reihenfolge.
Gesetzt den Fall, du möchtest wirklich für ein und dieselbe PErson
mehrere Wohnsitze verwalten, dann nimm mehr Tabellen :
In einer Tabelle WOhnsitze benutzt Du als Fremdschlüssel die ID deiner
eineindeutigen Person und zählst die Wohnsitze einzeln auf.
Beispiel Tabelle Person :
person_id (int),
Name (varchar)
vorname (varchar)
gebdatum (date)
...
Tabelle Wohnsitz
person_id (fermdschlüssel aus tabelle Person,
Strasse
Hausnr
PLZ
Ort
erster_wohnsitz (bool ! Also True oder False, obs der
erste/Hauptwohnsitz ist)
Dann kannst Du z.B.
SELECT * FROM PErson
JOIN wohnsitz ON Person.person_id=wohnsitz.person_id
WHERE Person.Name = "Müller"
Alles inclusive der 3 Wohnsitze mit Hauptwohnsitz von Herrn Müller
anzeigen.
HEY BEVOR JEMAND MECKERT : ALLES NUR PSEUDOCODE ZUR VERANSCHAULICHUNG
!!!
Hab ich nur fürs Prinzip hier mal hingepinnt, wer Snytax-Fehler findet
darf sie behalten !
Gruß
@ 50c (Gast)
>Jens G. schrieb:>> Warum soll das was unterschiedliches im Zugriffsplan der DB bewirken>> (auser daß die Spalten miteinander vertauscht ausgegeben werden).>...weil in einem möglichen vorhandenen Index die Reihenfolge der Spalten>eine Rolle spielen könnte!
Die Reihenfolge in der resultierenden Selectlist ist aber nicht abhängig
von der Spaltenreiehnfolge im Index, da solch eine mögliche
Übereinstimmung der Reiehenfolge ohnehin ein zufälliger Spezialfall
wäre, und das Umswitchen der Reihenfolge sowieso on the fly passiert.