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.
Roman schrieb: > Was macht mysql in einer query zuerst, was danach, wie wird es > zusammengesetzt, etc. EXPLAIN
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?
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!
Beitrag #5568514 wurde vom Autor gelöscht.
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.
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.