Ich habe 3 Tabellen: users
, posts
und likes
. Ein Beitrag heißt Hot Post, wenn es innerhalb der ersten Stunde nach der Erstellung mehr als 5 Likes hat. Folgendes wird verwendet, um nach einer Liste von Hot-Posts zu suchen. Kann mir jemand helfen, diese Abfrage zu verbessern (wie man sie indiziert oder umschreibt).Leistung verbessern postgresql Abfrage
-2
A
Antwort
1
Erstens, es sei denn, es kann wirklich einen Beitrag geben, der nicht zu einem Benutzer gehört, verwenden Sie einen inneren Join dort.
Unter der Annahme, dass es eine gute Anzahl von Posts und Likes gibt, wäre die beste Join-Strategie ein Merge-Join oder ein Hash-Join, den PostgreSQL automatisch auswählen sollte.
Für eine Mergeverknüpfung, könnten die folgenden Indizes hilfreich sein:
CREATE INDEX ON posts (id);
CREATE INDEX ON likes (post_id);
kein Index mit einem Hash-Join in diesem Fall helfen könnte.
Wenn der Planer eine verschachtelte Schleife wählt schließlich kommen, könnte es nützlich sein, die Abfrage neu zu schreiben:
... AND likes.created_at < post.created_at + INTERVAL '1 hour'
und einen Index wie
CREATE INDEX ON likes (post_id, created_at);
Verwandte Themen
- 1. PostgreSQL. Abfrage verbessern MIT
- 2. Leistung der ersten Abfrage verbessern
- 3. PostgreSQL multiple counts Abfrage Leistung
- 4. SQL - Pivot-Abfrage-Leistung verbessern
- 5. verbessern „abgeschlossen“ mit Abfrage Abfrage postgresql
- 6. Leistung der langsamen Solr-Abfrage verbessern
- 7. Langsam MySQL-Abfrage - wie die Leistung verbessern
- 8. Verbessern einer SQL LIKE-Abfrage-Leistung
- 9. Verbessern der Ad-hoc-Abfrage-Leistung
- 10. Verbessern Sie die Leistung
- 11. Verbessern der Leistung für einfache linke Join in PostgreSQL
- 12. Leistung für LIKE-Klausel verbessern
- 13. IONIC Liste verbessern Leistung
- 14. Verbessern LINQ Leistung
- 15. jQuery-Vorlage Leistung verbessern
- 16. WPF DataGrid-Leistung verbessern
- 17. Fehlerhafte indizierte Abfrage-Leistung in PostgreSQL
- 18. identische postgresql Abfrage mit unterschiedlicher Leistung
- 19. verbessern Abfrage in PostgresSQL
- 20. Verbessern Sie die Leistung der Abfrage mit Indexierung
- 21. Verbessern der Leistung einer Entity Framework linq Abfrage
- 22. wie SQL-Abfrage-Leistung in meinem Fall zu verbessern
- 23. wie die Abfrage-Leistung in Apache zu verbessern, zünden
- 24. Verbessern Sie die Leistung von Warehouse Abfrage auf Exact Online
- 25. Notwendigkeit dieser SQL-Abfrage zu optimieren die Leistung zu verbessern
- 26. Optimieren Sie und verbessern Sie die Leistung dieser MYSQL-Abfrage
- 27. Verbessern Sie die Leistung in zwei `ODER` Bedingung` mySQL` Abfrage
- 28. Verbessern der Leistung der UPDATE-Abfrage mit Unterabfragen
- 29. Wie die Leistung der Mysql-Abfrage zu verbessern
- 30. Verbessern android Fragment Animation Leistung
@TimBiegeleisen schaffen: es funktioniert. http://prntscr.com/hidlsc –
Sie müssen mehr Informationen für jeden zur Verfügung stellen, um Ihnen wertvolle Einblicke zu geben. Zum Beispiel Ihre Tabellendefinitionen, vorhandene Indizes (falls vorhanden) und die Ausgabe von EXPLAIN. Versuchen Sie außerdem, Tabellenaliase nicht mit Großbuchstaben zu versehen, und entfernen Sie alle doppelten Anführungszeichen (zur besseren Lesbarkeit). – Nicarus
Bitte ** [EDIT] ** Ihre Frage und fügen Sie die 'create table' Anweisungen für die fraglichen Tabellen (einschließlich aller Indizes) und den Ausführungsplan hinzu, der mit **' explain (analyze, buffers) '** erstellt wurde. [** Formatierter Text **] (http://stackoverflow.com/help/formatting) bitte, [keine Screenshots] (http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload-images-of-code-auf-so-wenn-eine-Frage stellen/285557 # 285557) –