PostgreSQL LIKE-Abfragen: Leistungsengpässe und Optimierungsstrategien
Die LIKE
-Abfragen von PostgreSQL, die für ihre Rechenintensität bekannt sind, zeigten eine inkonsistente Leistung gegenüber einer bestimmten Datenbanktabelle. Während einige Abfragen innerhalb von 200–400 Millisekunden abgeschlossen sind, dauern andere bis zu 30 Sekunden.
Standard-Indizierungseinschränkungen
Ein erster Versuch, einen B-Tree-Index für das Feld owner1
zu verwenden, konnte die Leistung nicht verbessern. Auch Experimente mit verschiedenen LIKE
Syntaxvarianten erbrachten keine nennenswerten Ergebnisse.
Trigramm-Indizes: Eine überlegene Lösung
Die pg_trgm
-Erweiterung bietet Trigramm-Indizes (GIN/GiST), die erhebliche Leistungsverbesserungen für LIKE
- und ILIKE
-Operationen bieten, insbesondere bei längeren Zeichenfolgen. Wichtig ist, dass diese Indizes auch Wörter unterstützen, die kürzer als drei Zeichen sind.
Präfix-Matching optimieren
Für Suchen ohne führende Platzhalter sollten Sie diese Alternativen in Betracht ziehen:
^@
-Operator/starts_with()
-Funktion (PostgreSQL 11): Der ^@
-Operator und die starts_with()
-Funktion, die in PostgreSQL 11 eingeführt wurden, bieten bei Verwendung mit SP-GiST-Indizes einen effizienten Präfixabgleich .COLLATE "C"
: Mit COLLATE "C"
erstellte Indizes verhalten sich ähnlich wie die Operatorklasse text_pattern_ops
und ermöglichen einen optimierten Präfixabgleich mit B-Tree-Indizes.text_pattern_ops
Operatorklasse: Diese Operatorklasse erstellt B-Tree-Indizes, die speziell für linksverankerte Muster entwickelt wurden (kein führender Platzhalter).Zusätzliche Ressourcen
Ein detaillierteres Verständnis des Mustervergleichs in PostgreSQL finden Sie in diesen Ressourcen:
Das obige ist der detaillierte Inhalt vonWarum sind meine PostgreSQL-LIKE-Abfragen so langsam und wie kann ich sie beschleunigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!