2016-05-31 8 views

Antwort

0

Ja, es macht einen Unterschied.

Auch wenn Sie nicht absichtlich sortieren, gibt es verschiedene Operationen, die interne Sortierschritte erfordern (einige Aggregatfunktionen, DISTINCT, Nested Loop Joins usw.).

Auch Index auf dem Feld muss intern Werte sortieren - und Kollationsregeln beachten, es sei denn COLLATE "C" gilt (keine Kollationsregeln).

Für die Suche nach volle Gleichheit Sie wollen einen Index - das funktioniert in beide Richtungen (für Gleichheit), aber es ist insgesamt schneller ohne Kollatierungsregeln. Abhängig von den Details Ihres Anwendungsfalls kann der Effekt vernachlässigbar oder erheblich sein. Der Einfluss wächst mit der Länge deiner Saiten. Ich lief auf einem ähnlichen Fall vor einiger Zeit eine Benchmark:

Auch gibt es mehr Muster Optionen mit locale „C“ entspricht. Die Alternative wäre, einen Index mit der speziellen Operatorklasse varchar_pattern_ops zu erstellen.

Verwandte:

Postgres 9.5 eingeführt Leistungsverbesserungen mit einer Technik "abgekürzt Schlüssel" genannt, die in Probleme lief mit etwas lo cales. So wurde es deaktiviert, außer für das Gebietsschema C. Quoting The release notes of Postgres 9.5.2:

  • Disable abgekürzte Schlüssel für Zeichenfolge in nicht C locales Sortierung (Robert Haas)

PostgreSQL 9.5 Logik eingeführt zur Beschleunigung Vergleich der Zeichenfolge Datentypen, die von der Standard-C-Bibliothek-Funktion strxfrm() als Ersatz für strcoll(). Es stellt sich jetzt heraus, dass die meisten Versionen von glibc (Linux-Implementierung der C-Bibliothek) fehlerhafte Implementierungen von strxfrm() haben, die in einigen Gebietsschemas Zeichenfolge Vergleich Ergebnisse, die nicht übereinstimmen produzieren können. Bis dieses Problem besser sein kann gekennzeichnet, deaktivieren Sie die Optimierung in allen Nicht-C-Locales.(C locale ist sicher, da es nutzt weder strcoll() noch strxfrm().)

Leider ist dieses Problem betrifft nicht nur die Sortierung, sondern auch Eintrag Ordnung in B-Tree-Indizes, was bedeutet, dass B-Tree-Indizes auf text, varchar oder char Spalten können jetzt beschädigt sein, wenn sie nach ein betroffenes Gebietsschema sortieren und unter PostgreSQL 9.5.0 oder 9.5.1 erstellt oder geändert wurden. Benutzer sollten REINDEX Indizes, die möglicherweise betroffen sind.

Es ist zu diesem Zeitpunkt nicht möglich, eine erschöpfende Liste von bekanntermaßen betroffenen Gebieten zu geben. C Gebietsschema ist sicher bekannt, und es gibt keine Beweise für Probleme in Englisch-basierten Gebietsschemas wie , aber einige andere beliebte Gebietsschemas wie de_DE sind in den meisten glibc Versionen betroffen.

Das Problem veranschaulicht auch, wo Kollationsregeln im Allgemeinen kommen.