相关疑难解决方法(0)

INDEX 中使用的 CONCAT 导致错误:索引表达式中的函数必须标记为 IMMUTABLE

我面临以下错误:

ERROR:  functions in index expression must be marked IMMUTABLE
Run Code Online (Sandbox Code Playgroud)

尝试创建这样的索引时:

CREATE INDEX full_phone_number ON orders_clientphone (concat(area_code, phone));
Run Code Online (Sandbox Code Playgroud)

另一方面,当使用替代语法进行连接时:

CREATE INDEX full_phone_number ON orders_clientphone ((area_code || phone));
Run Code Online (Sandbox Code Playgroud)

Postgres 对此非常满意。
两列都定义为character varying(256)

postgresql index datatypes functions postgresql-9.4

9
推荐指数
1
解决办法
4979
查看次数

具有最新时间戳的行

如何获取列中具有最新值的TIMESTAMPZ行?是否需要索引?指数会改变策略吗?行为会因数据库而异吗(我使用的是 Postgres 9.4)?

我的应用程序记录来自数据馈送的数据。另一个过程无休止地查询以获取最新的最新条目。较旧的数据有时可能来自二手资料。所以最近插入的行通常但不一定是最新的数据。

我正在使用这种 SQL where when_is a TIMESTAMP WITH TIME ZONEcolumn:

SELECT *
FROM my_table_ 
ORDER BY when_ DESC
LIMIT 1
;
Run Code Online (Sandbox Code Playgroud)

此代码有效(如果数据中没有 NULL 值!)。但是可能有几百万行,并且每 10 秒查询一次,我很担心性能。

when_列上没有任何索引,此语句是否需要对所有行进行全面扫描?

添加索引会改变性能吗?Postgres 会自动扫描索引以定位最近的行,还是我必须做些什么才能进行索引扫描?

使用when_列上的索引,我是否应该更改此 SQL 以使用其他一些查询方法/策略?

有没有其他方法来收集新插入的行?我的主键使用UUID而不是SERIAL 类型,并且可能会在多个数据库实例之间联合数据,因此排除了检查不断增加的整数的可能性。

postgresql performance index index-tuning query-performance

2
推荐指数
1
解决办法
2万
查看次数