我正在尽我所能优化我的PostgreSQL 8.3 DB表,我不确定是否需要对某些列使用varchar_pattern_ops
,其中我对字符串的前N个字符执行LIKE
.根据this documentation,只有在"服务器不使用标准‘C’语言环境时"才需要使用xxx_pattern_ops
.
有人能解释一下这是什么意思吗?如何判断数据库使用的语言环境?
我正在尽我所能优化我的PostgreSQL 8.3 DB表,我不确定是否需要对某些列使用varchar_pattern_ops
,其中我对字符串的前N个字符执行LIKE
.根据this documentation,只有在"服务器不使用标准‘C’语言环境时"才需要使用xxx_pattern_ops
.
有人能解释一下这是什么意思吗?如何判断数据库使用的语言环境?
目前一些locale[docs]支持只能在initdb时间设置,但我认为与_pattern_ops
相关的支持可以在运行时通过SET修改,LC_COLLATE.要查看设定值,可以使用SHOW命令.
例如:
SHOW LC_COLLATE
_pattern_ops
个索引在使用模式匹配 struct 的列中很有用,比如LIKE
或regexp.你仍然需要做一个常规索引(不带_pattern_ops
)来对索引进行相等搜索.因此,您必须考虑所有这些因素,以确定是否需要在表中使用此类索引.
关于locale是什么,它是一套关于字符顺序、格式和类似事情的规则,这些规则因语言/国家而异.例如,区域设置fr_CA(加拿大的法语)可能与en_CA(加拿大的英语)有一些不同的排序规则(或显示数字的方式等).标准"C"语言环境是符合POSIX标准的默认语言环境.只有严格的ASCII字符是有效的,并且排序和格式规则主要是en_US(美国英语)的规则
在计算中,locale是一组