我面临以下错误:
Run Code Online (Sandbox Code Playgroud)ERROR: functions in index expression must be marked IMMUTABLE
尝试创建这样的索引时:
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)
。
如何获取列中具有最新值的TIMESTAMPZ
行?是否需要索引?指数会改变策略吗?行为会因数据库而异吗(我使用的是 Postgres 9.4)?
我的应用程序记录来自数据馈送的数据。另一个过程无休止地查询以获取最新的最新条目。较旧的数据有时可能来自二手资料。所以最近插入的行通常但不一定是最新的数据。
我正在使用这种 SQL where when_
is a TIMESTAMP WITH TIME ZONE
column:
SELECT *
FROM my_table_
ORDER BY when_ DESC
LIMIT 1
;
Run Code Online (Sandbox Code Playgroud)
此代码有效(如果数据中没有 NULL 值!)。但是可能有几百万行,并且每 10 秒查询一次,我很担心性能。
when_
列上没有任何索引,此语句是否需要对所有行进行全面扫描?
添加索引会改变性能吗?Postgres 会自动扫描索引以定位最近的行,还是我必须做些什么才能进行索引扫描?
使用when_
列上的索引,我是否应该更改此 SQL 以使用其他一些查询方法/策略?
有没有其他方法来收集新插入的行?我的主键使用UUID而不是SERIAL 类型,并且可能会在多个数据库实例之间联合数据,因此排除了检查不断增加的整数的可能性。