我正在尽我所能优化我的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是一组

Postgresql相关问答推荐

Qt,PostgreSQL -从NUERIC列检索max int64_t/uint64_t值

PostgreSQL中btree_gist索引涉及integer和tstzrange属性查询计划的问题

在Docker容器内的Postgres,如何通过Promail将JSON登录到Loki?

如何在Postgres中对分区表使用Hibernate验证?

如何在PostgreSQL中更改分区的表空间?

PL/pgSQL中的IP递增函数

对表执行 DISABLE TRIGGER ALL 是否也会禁用 FK 指向该表?

使用 WHERE 子句创建递归视图

INSERT 语句返回策略违规(USING 表达式)

如何使用 Grafana 测量 PostgreSQL 中的复制

为什么 postgresql 可以在这个查询中高效地使用索引?

Postgresql JSONB 来了.现在用什么?Hstore?JSON?EAV?

保存 geodjango PointField 时出错

SQLAlchemy 中使用什么类型存储字节字符串?

判断值是否存在于列中

如何在 plpgsql 中使用记录类型变量?

理解 Postgres 行大小

如何启动 Postgres 服务器?

postgres - 比较两个数组

查询 JSON 列中的数组元素