Verknüpfung mehrere Tabellen mit "GROUP BY" und das Letzte Datum in MySQL

ich habe 2 mysql-Tabellen

Tabelle 1 ist die "qualitaet-inventar" und hat 3000 Zeilen mit "sachnummer" als AUTO_INCREMENT

http://s14.directupload.net/images/130421/5qzjmv7b.png

Tabelle 2 ist die "qualitaet" und hat ein paar Zeilen.. hier ist "id" AUTO_INCREMENT
das wichtigste ist, dass die "sachnummer" werden kann, existieren viele Male. (siehe rote Markierung im Bild)

http://s1.directupload.net/images/130421/yj2qt65d.png


was ich tun möchte, ist ein left join von der "qualitaet" zu "qualitaet-inventar"

möchte ich alle "sachnummer", indem Sie mit den aktuellsten Datum von "erstellt" auf "qualitaet"

und wenn ein "sachnummer" ist nicht verfügbar in der "qualitaet" eine leere "join", um die "qualitaet-inventar"

also ich habe diesen code

SELECT 
    i.`sachnummer` AS id,
    MAX(q.`created`) AS letztemessung,
    i.`sachnummer-name` AS sachnummer
FROM
        `qualitaet-inventar` i
LEFT JOIN
        `qualitaet` q on i.`sachnummer` = q.`sachnummer`
GROUP BY
        sachnummer
ORDER BY
    sachnummer ASC

das problem ist, dass es braucht eine lange Zeit, um dieses Ergebnis

http://s7.directupload.net/images/130421/y32di9hc.jpg

mit diesem code funktioniert es schneller

SELECT 
    q.`sachnummer` AS id,
    MAX(q.`created`) AS letztemessung,
    i.`sachnummer-name` AS sachnummer
FROM
    qualitaet q
LEFT JOIN
    `qualitaet-inventar` i on q.`sachnummer` = i.`sachnummer`
GROUP BY
    sachnummer
ORDER BY
    sachnummer ASC

aber ich bekomme nicht das Loch Inventar und ein leeres Datum mit diesem code

http://s14.directupload.net/images/130421/md6pfsz9.jpg

ist es möglich, diese Tabelle in einen schnelleren Weg für high-Tabelle-Zeilen? 😀

http://s7.directupload.net/images/130421/vzb2hosn.jpg

edit:

hier sind meine Indizes

http://s14.directupload.net/images/130421/gvfgcvp6.jpg

Deine beiden Anfragen sind grundsätzlich die gleichen. durch die änderung der from und join Klauseln Rum, alles, was Sie getan haben, ist im wesentlichen geschaltet zwischen einem LEFT und ein RIGHT beitreten. Stellen Sie sicher, Sie haben Indizes für ALLE Felder, die Sie verwenden in der wo/join/group-Klauseln.
Wenn Sie fügen Sie die Bedingung WHERE q.`sachnummer` IS NULL zu deiner ersten Abfrage, wie lange dauert es, zu laufen? Auch wenn Sie ausführen der ersten Abfrage unmittelbar nach der zweiten Abfrage, dauert es noch so lange dauern? (Die performance Diskrepanz zwischen der ersten und der zweiten Abfrage kann wurden durch die RDBMS-re-mit-Cache-Daten beim ausführen der zweiten Abfrage.)
die erste Abfrage mit where -> Showing rows 0 - 29 ( 1,087 insgesamt, die Abfrage dauerte 22.8324 sec) und die zweite Reihe muss 22.7028 sec
Haben Sie überprüft, ob Tabellen oder Indizes beteiligten muss repariert werden? 34 Sekunden ist eine lange Zeit für die 3000 Zeilen.
Siehe auch dev.mysql.com/doc/refman/5.0/en/temporary-files.html - dies könnte möglicherweise verknüpft werden, um den temp-space-Themen. Es könnte sich auch lohnen, diese Frage auf dba.stackexchange.com .

InformationsquelleAutor bernte | 2013-04-21

Schreibe einen Kommentar