Ich habe die folgende Abfrage,Sub-Abfrage auf großen Tisch mit verbinden extrem langsam
SELECT * FROM users,
(SELECT *
FROM mastery
WHERE champion_rank = 1
ORDER BY global_rank ASC
LIMIT 3) as ranks
WHERE users.id = ranks.user_id
Mastery 22M Reihen hat und Benutzer hat Reihen 5M. Die obige Abfrage dauert 1800 ms.
Das Problem ist, dass die Unterabfrage nach, wenn sie von selbst laufen 2,5 ms dauert
SELECT *
FROM mastery
WHERE champion_rank = 1
ORDER BY global_rank ASC
LIMIT 3
auszuführen, und einen einzelnen Benutzer von Benutzer-Tabelle nimmt 2,5 ms
SELECT * FROM users WHERE id = 4234523
So theoretisch abrufen, wenn Ich habe nur meinen Code geändert, um die erste Unterabfrage durchzuführen, und dann für jede Zeile, die zurückgegeben wird, eine zusätzliche Abfrage auszuführen, würde der gesamte Prozess 2.5 + (3 * 2.5) = 10 ms dauern.
Sicher Postgres seltsam, etwas zu tun?
Struktur und Indizes von Datenbanken können here
warum nicht beitreten benutzen? Haben Sie auch Indizes auf den Tisch gelegt? – JanR
Bitte lesen Sie http://stackoverflow.com/tags/postgresql-performance/info und http://wiki.postgresql.org/wiki/SlowQueryQuestions dann [Bearbeiten] Ihre Frage ein und fügen Sie die fehlenden Informationen –