是否可以在jsonb列上创建有效的索引,以便在postgresql中为时间戳值?
我尝试了这个建议Create timestamp index from JSON on PostgreSQL但是ORDER和SIMPLE WHERE操作仍在使用没有索引的seq扫描。
使用索引查询执行时间而没有索引没有区别:
SELECT * FROM bums.mytable_no_ind ORDER BY (ts->>'date')::TIMESTAMP DESC
和
EXPLAIN ANALYZE SELECT * FROM bums.mytable_no_ind WHERE (ts->>'date')::TIMESTAMP = NOW()
有关表格的信息:
create table bums.mytable_no_ind (
s serial primary key,
ts jsonb,
x int,
y int,
z int
);
insert into bums.mytable_no_ind (ts, x, y, z)
select
('{"date": "' || clock_timestamp() || '"}')::jsonb,
500 * RANDOM(),
500 * RANDOM(),
500 * RANDOM()
from generate_series(1, 1000000)
;