Forum: PC-Programmierung Mysql Query Ablauf?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Roman (Gast)


Bewertung
0 lesenswert
nicht 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)


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

EXPLAIN

von Huh (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Speziell auch auch auf die Ausfuehrungszeit...

von Der kein Bock mehr A. (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.