Twilo: SQL Syntax optimieren

Beitrag lesen

Hallo,

welcher Syntax ist eigentlich besser?

das heißt: "Welche Syntax ist eigentlich besser?"!

ok ;-)

Zwei ellenlange Statements, einziger Unterschied der CROSS JOIN im ersten Fall, der INNER JOIN im zweiten Fall, warum machst Du es Deinen potentiellen Helfern so schwer? Wenn ein INNER JOIN existiert, dann schreib' das auch hin. Also ist meiner Meinung nach die zweite Variante sauberer (und portabler). Der Umgang von MySQL mit CROSS JOINs variiert zwischen MySQL-Versionen und steht zum Teil im Widerspruch zu den SQL-Standards.

kann man unter MySQL 4.1 die Formel in Zwischenschritte untergliedern?
groesse._breite / 1000 * groesse._hoehe / 1000* auflage._auflage * gewicht._bedrgewicht/1000 * groesse._bedrkosten
kommt z.B. 3mal vor

Was hast Du versucht?

bis jetzt noch nichts, da ich unter mysql.com kein passenden Abschnitt gefunden habe

beide Abfragen brauchen laut phpMyAdmin ca. 0.0035 Sekunden
Gibt es eine Möglichkeit, wie man die Abfrage allgemein optimieren kann?

Frag' die Datenbank, nutze EXPLAIN.

die Ausgabe von EXPLAIN sieht bei beiden wie folgt aus
id select_type  table                      type    possible_keys                                 key                    key_len  ref                                      rows  Extra
1  SIMPLE       produkt                    const   PRIMARY,_gewinnfaktor_FKindex                 PRIMARY                4        const                                    1     Using temporary
1  SIMPLE       faktor                     const   PRIMARY                                       PRIMARY                4        const                                    1
1  SIMPLE       t1_produkt_has_farbe       const   PRIMARY,_farb_FKindex,_produkt_FKindex        PRIMARY                8        const,const                              1     Using index
1  SIMPLE       farbe                      const   PRIMARY                                       PRIMARY                4        const                                    1
1  SIMPLE       t1_produkt_has_versandart  const   PRIMARY,_versandart_FKindex,_produkt_FKindex  PRIMARY                8        const,const                              1     Using index
1  SIMPLE       versandart                 const   PRIMARY                                       PRIMARY                4        const                                    1
1  SIMPLE       t1_produkt_has_auflage     const   PRIMARY,_produkt_FKindex,_auflage_FKindex     PRIMARY                8        const,const                              1     Using index
1  SIMPLE       auflage                    const   PRIMARY                                       PRIMARY                4        const                                    1
1  SIMPLE       t1_produkt_has_gewicht     const   PRIMARY,_gewicht_FKindex,_produkt_FKindex     PRIMARY                8        const,const                              1     Using index
1  SIMPLE       gewicht                    const   PRIMARY                                       PRIMARY                4        const                                    1
1  SIMPLE       t1_produkt_has_groesse     const   PRIMARY,_produkt_FKindex,_groesse_FKindex     PRIMARY                8        const,const                              1     Using index
1  SIMPLE       groesse                    const   PRIMARY                                       PRIMARY                4        const                                    1
1  SIMPLE       ffracht                    index   PRIMARY                                       _aktiv_status_FKindex  1        NULL                                     3     Using index; Distinct
1  SIMPLE       fprodukt                   ref     _fracht_FKindex                               _fracht_FKindex        4        usrdb_schwetbq_druck.ffracht._fracht_id  1     Using index; Distinct
1  SIMPLE       fversandart                ref     PRIMARY,_fracht_FKindex                       _fracht_FKindex        4        usrdb_schwetbq_druck.ffracht._fracht_id  1     Using index; Distinct
1  SIMPLE       fgewicht                   ref     PRIMARY,_fracht_FKindex                       _fracht_FKindex        4        usrdb_schwetbq_druck.ffracht._fracht_id  3     Using index; Distinct
1  SIMPLE       fgroesse                   ref     PRIMARY,_fracht_FKindex                       _fracht_FKindex        4        usrdb_schwetbq_druck.ffracht._fracht_id  3     Using index; Distinct
1  SIMPLE       fauflage                   ref     PRIMARY,_fracht_FKindex                       _fracht_FKindex        4        usrdb_schwetbq_druck.ffracht._fracht_id  3     Using index; Distinct
1  SIMPLE       ffarbe                     ref     PRIMARY,_fracht_FKindex                       _fracht_FKindex        4        usrdb_schwetbq_druck.ffracht._fracht_id  3     Using index; Distinct

Die SQL Befehle ohne DISTINCT geben 41.280 Datensätze zurück...
ich fage mich wieso... eigentlich dürfte nur einer rauskommen

warum? Woher sollen wir das wissen? Du hast uns keinen einzigen Deiner Datensätze verraten. Offensichtlich gibt es eben 41.280 verschiedene Möglichkeiten, diese Datensätze in Deinem komplexen JOIN miteinander zu kombinieren, wobei stets der gleiche Preis rauskommt. Wo ist das Problem? Hast Du Rouvens und meinen Artikel zu JOINs gelesen?

Möglicherweise hast Du ein Verständnisproblem, was JOINs betrifft - und machst falsche Annahmen. Zwar hat auch MySQL 4.1 Verständnisproblem, was JOINs betrifft und liefert in bestimmten Fällen systematisch falsche Ergebnisse - aber nicht bei ausschließlicher Verwendung von INNER JOINs wie in Deinem Fall.

könntest du bitte den Link posten?

mfg
Twilo