PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Indizierungsstrategie für verschiedene Kombinationen von WHERE-Klauseln inkl. Textmuster

Ihr hinzugefügtes Prädikat verwendet den LIKE Betreiber:

AND network LIKE '%'

Der tatsächliche Abfrageplan hängt davon ab, was Sie anstelle von '%' übergeben. Aber im Allgemeinen sind einfache btree-Indizes dafür nutzlos. Sie benötigen einen Trigrammindex oder verwenden die Textsuchinfrastruktur oder ähnliches, je nachdem, nach welchen Mustern Sie suchen.

Siehe:

Sie können sogar mehrere Indizierungsstrategien kombinieren. Beispiel:

Wenn das sein soll:

AND network = '<input_string>'

Verwenden Sie dann unbedingt = Operator, nicht LIKE . Gründe in aufsteigender Reihenfolge der Wichtigkeit:

  1. kürzer
  2. weniger verwirrend
  3. macht die Arbeit für den Postgres-Planer einfacher (sehr geringfügig billiger)
  4. richtig

    Wenn Sie versehentlich eine Zeichenfolge mit Sonderzeichen übergeben, erhalten Sie möglicherweise falsche Ergebnisse. Siehe: