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
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den folgenden sollte nicht Arbeit nicht schneller, als die vorhandene Abfrage, aber aus deiner Beschreibung kann tun:
Andere Möglichkeit:
Ich habe eine weitere mögliche Variante - können Sie überprüfen, wie lange das braucht?
der zweite code: Zeigt Zeilen 0 - 2999 ( ab 3.000 insgesamt, die Abfrage dauerte 0.0176 sec) warum?????? 😀
Die Abfrage ist nicht irgendeine explizite Verbindung, obwohl Sie das Verwaltungssystem sollte in der Regel einen besseren job machen, der Beitritt als diese. :/
vielleicht ist es ein problem, dass ich xampp?
InformationsquelleAutor
Dies ist die Allgemeine Idee, kürzere Tabellennamen.
InformationsquelleAutor Dan Bracuk