Forum: PC-Programmierung Mysql Query Ablauf?


von Roman (Gast)


Lesenswert?

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.

von Cyblord -. (Gast)


Lesenswert?

Roman schrieb:
> Was macht mysql in einer query zuerst, was danach, wie wird es
> zusammengesetzt, etc.

EXPLAIN

von Huh (Gast)


Lesenswert?

Abradolf L. schrieb:
> Roman schrieb:
>> Was macht mysql in einer query zuerst, was danach, wie wird es
>> zusammengesetzt, etc.
>
> EXPLAIN

https://www.explain.de/explain/

Meinst du das?

von Roman (Gast)


Lesenswert?

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.

von Cyblord -. (Gast)


Lesenswert?

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.

von Dusan J. (dusan)


Lesenswert?

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.

von Jens G. (jensig)


Lesenswert?

>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).

von 50c (Gast)


Lesenswert?

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!

Beitrag #5568514 wurde vom Autor gelöscht.
von Purzel H. (hacky)


Lesenswert?

Speziell auch auch auf die Ausfuehrungszeit...

von Der kein Bock mehr A. (Gast)


Lesenswert?

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ß

von Jens G. (jensig)


Lesenswert?

@ 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.

: Bearbeitet durch User
Beitrag #5786708 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.