Postgresql
使用帶有 utf-8 的 text_pattern_ops 的文本索引與帶有 C 的預設運算符類?
- 每個運算符類發生了什麼,為什麼在使用 utf-8 時必須使用 text_pattern_ops?
- 在 C 中使用預設運算符類時,如果將數據庫轉儲到另一個使用 utf-8 的 Postgres,文本列索引會發生什麼情況?這僅僅是創建新索引的問題
text_pattern_ops
嗎?- 使用 C 的預設運算符類的性能是否比 text_pattern_ops 更好或更差?
我正在考慮將 RDS
client_encoding
參數更改為,C
以便不必在text_pattern_ops
任何地方使用,但我想了解是否存在任何缺點(除了不支持表情符號和其他語言)或併發症。相關文件:https ://www.postgresql.org/docs/current/static/indexes-opclass.html
這不是關於編碼,而是關於整理。
考慮一下:
select * from (values ('1,z'),('1,2j'),('12q'),('13 apples')) foo(x) order by x collate "en_US";
給出:
x ----------- 1,2j 12q 13 apples 1,z
如果您使用該排序規則進行索引,您將如何有效地支持
x like '1,%'
查詢?並非所有以“1”開頭的事物在索引中都是相鄰的。這是 text_pattern_ops(或 C 排序規則)解決的問題。您可以使用 UTF8 編碼但 C 排序規則創建數據庫。這意味著您不必將 text_pattern_ops 撒在所有索引上,並且您在文本列上建構的索引會更快(以及您所做的任何排序合併連接)。但是您仍然可以儲存非 ASCII 字元,儘管它們會很有趣。
此外,設置
client_encoding
不會有任何區別。重要的是伺服器的編碼和整理,而不是客戶端的。