另一种选择是使用 JSON 或 JSONB,并在密钥上具有唯一的哈希索引。
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE key_values (
key uuid DEFAULT uuid_generate_v4(),
value jsonb
);
CREATE INDEX idx_key_values ON key_values USING hash (key);
一些查询
SELECT * FROM key_values WHERE key = '1cfc4dbf-a1b9-46b3-8c15-a03f51dde891';
Time: 0.514 ms
postgres=# SELECT * FROM key_values WHERE key = '1cfc4dbf-a1b9-46b3-8c15-a03f51dde890';
Time: 1.747 ms
postgres=# do $$
begin
for r in 1..1000 loop
INSERT INTO key_values (value)
VALUES ('{"somelarge_json": "bla"}');
end loop;
end;
$$;
DO
Time: 58.327 ms
您无法像使用 B 树那样运行高效的范围查询,但它应具有更好的读/写性能。指数应该小60%左右。