Die folgende Abfrage funktioniert, aber es ist sehr langsam für 10 Datensätze (2 Sekunden). Das Profiling sagt, dass es einen TMP-Tisch erstellt, aber ich bin mir nicht sicher warum.MySQL - Wie kann diese Abfrage optimiert werden?
Grundsätzlich schließe ich mich dem aktuellen Benutzer, den acl-Gruppen an, um alle Gruppen, in denen sie sich befinden, den Gruppen beizutreten, um alle Unternehmen zu erhalten, in denen sie sich befinden, und dann den Firmen zu den Aufträgen beizutreten , um alle Aufträge zu bekommen ..
Wenn ich diese Zeile
ORDER BY orders.created_on DESC
entfernen
dann die Abfrage ausgeführt in 0,06 Sekunden (mehr als akzeptabel) ..
Hilfe, alle Ideen auf, wie zu optimieren ? Vielen Dank :)
SELECT
orders.uuid,
companies.name as company_name
FROM
users u
JOIN
users_acl_groups g on u.uuid = g.user_uuid
JOIN
users_acl acl on (acl.user_uuid = u.uuid or acl.group_uuid = g.group_uuid)
JOIN
companies on acl.item_uuid = companies.uuid
JOIN
orders on companies.uuid = orders.company_uuid
WHERE
u.uuid = 'DDEC8073-5056-C000-01ED583A51CBCA32' and orders.status <> ''
ORDER BY orders.created_on DESC
limit 0, 10;
UPDATE, erklären die der Abfrage ..
1 SIMPLE Aufträge ALL 9403 Mit vorübergehend; Verwenden von filesort
1 EINFACH acl ALL 1859 Verwenden wo; Verwendung des Verbindungspuffers
1 EINFACH g ALL 2005 Verwendung wo; beitreten Mit Puffer
1 SIMPLE Unternehmen eq_ref Primär Primär 52 table.orders.company_uuid 1
1 EINFACH u ALL 33595 verwenden, wo; klar; -Join-Puffer
Geändert Ihren Titel, als Raten, dass es kostet Sie einen Downvote aufgrund seiner imperativen und anspruchsvollen Ton, wenn Ihre Frage ist gut formuliert. –
Versuchen Sie, dieselbe Abfrage mit Join zu verwenden, die auf eine andere Spalte als die UID angewendet wird. Versuchen Sie es mit int, float, string, UID und beachten Sie die Zeit. Lassen Sie uns auch wissen, wenn Sie eine Variation finden. –
Haben Sie einen Index für orders.created_on? Zeigen Sie die Ausgabe auf EXPLAIN in Ihrer Abfrage an. Vielleicht könnten Sie von anderen Indizes profitieren. Welche EXPLAIN wird uns sagen. – nos