Heute haben mich sieben Datenbanken in sieben Wochen mit den Operatorenindizes vertraut gemacht.
Sie können Zeichenfolgen für die Musterübereinstimmung mit den vorherigen Abfragen
text_pattern_ops
indizieren, indem Sie einen Operatorklassenindex erstellen , sofern die Werte in Kleinbuchstaben indiziert sind.
CREATE INDEX moves_title_pattern ON movies (
(lower(title) text_pattern_ops);
Wir haben die verwendet,
text_pattern_ops
weil der Titel vom Typ Text ist. Wenn Sie zum Index Varchars, Zeichen oder Namen, verwenden Sie die entsprechenden ops:varchar_pattern_ops
,bpchar_pattern_ops
, undname_pattern_ops
.
Ich finde das Beispiel wirklich verwirrend. Warum ist das sinnvoll?
Wenn die Spalte vom Typ Text ist, werden die anderen Typen (varchar, char, name) nicht in Text umgewandelt, bevor sie als Suchwert verwendet werden?
Wie verhält sich dieser Index anders als mit dem Standardoperator?
CREATE INDEX moves_title_pattern ON movies (lower(title));
quelle
Antworten:
Die Dokumentation gibt Ihnen häufig eine Antwort auf solche Fragen. Wie auch in diesem Fall :
In der Dokumentation heißt es weiter:
Sie können Ihr Gebietsschema wie folgt überprüfen (es ist wahrscheinlich UTF8 anstelle von "C"):
quelle
text_pattern_ops
vom Gebietsschema abhängt? Es scheint mir von Vorteil zu sein, da mein Gebietsschema 'en_US.UTF-8' (nicht 'C') ist, sodass Musterabfragen nicht den Standardindex verwenden können.LIKE
Abfrage mit einem einfachen B-Tree-Index gesehen haben, muss die Datenbank dasC
Gebietsschema verwenden. Oder der Index wird mitCOLLATE "POSIX"
(oderCOLLATE "C"
) definiert und die Abfrage gibt eine Übereinstimmung anCOLLATION
. Bei anderen Sortierungen stimmt die Reihenfolge des Index nicht mit den Gebietsschemaregeln überein und kann daher nicht für den Mustervergleich verwendet werden.