Postgres nicht verwenden Sie einen index mit "ORDER BY"
- Ich habe eine sehr große Tabelle.
- Ich habe einen index auf den Spalten col1.
- Wie erhalte ich die bestellten Daten von col1.
- Aus der Abfrage-plan kann ich sagen, dass es nicht den index verwenden.
- Wenn ich "LIMIT", es beginnt mit der Verwendung des index
- Für große Wert für "LIMIT", es Stoppt die Verwendung des index.
Keine Ahnung?
P. S. ich möchte die Daten gruppierte Werte von spalte1 (nicht unbedingt sortiert ist), irgendwelche Vorschläge außer "ORDER BY".
DANK !!
- Wo ist das Ergebnis von EXPLAIN ANALYZE? Ohne Sie, niemand hat eine Ahnung, warum die Dinge nicht so funktionieren wie Sie denken würde.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr wieder alle Zeilen aus der Tabelle ein index-scan wird langsamer sein als ein table-scan.
Warum denken Sie, müssen Sie die index-Nutzung?
Könnten Sie versuchen, zu verwenden
set enable_seqscan = false
zur Deaktivierung der sequenziellen scan, aber ich bin mir sicher, die wird langsamer sein als mit dem sequenziellen scan.
BESTELLUNG DURCH die nur Methode zum Sortieren Ihrer Daten. Jede andere Sortierung, die Sie vielleicht sehen, ist reiner Zufall
Bearbeiten
Um die Sache aufzuklären: ich nicht empfehlen turn-seq scan aus. Ich habe gerade gebucht dies als eine Möglichkeit zu zeigen, dass die seq-scan ist in der Tat schneller als die index-scan. Einmal ausgeschaltet, wird der Ausführungsplan mit index-scan wird wahrscheinlich langsamer sein als der seq-scan zeigt die OP, dass es keine Notwendigkeit für einen index-scan.
Zusätzlich zu der Antwort von a_horse_with_no_name:
Verwendung eines index tatsächlich zwei unterschiedliche Vorgänge: Erstens die von Ihnen gewünschten Wert gesucht wird im index. Im index ist die Adresse, mit der die komplette Aufzeichnung, die wird dann aufgelöst. Beide Operationen sind sehr schnell für bestimmte Abfragen.
Wenn Sie planen, alle oder die meisten Platten ja eh, der Vorteil verschwindet. Wenn Sie möchten alle Datensätze aus und gehen Sie durch den index, dauert es länger, weil für jeden Datensatz gibt es zwei sucht. Es ist einfacher zu laufen, nur über die ganze Tabelle ohne index, da dies eine zu suchen, die pro Spalte (ja, ich weiß, eigentlich ist es weniger, als dass die da ganze Blöcke gelesen werden, usw... ich will einfach nur, um es einfach zu halten).