xjo*_*oin 8 postgresql indexing uuid gist-index
我不能直接使用uist和gist索引
CREATE INDEX idx_leaderboads_values_gist
ON leaderboard_entry
USING gist
(id_leaderboard , value);
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
错误:数据类型uuid没有访问方法"gist"的默认运算符类
提示:您必须为索引指定运算符类,或者为数据类型定义默认运算符类.
Erw*_*ter 10
btree_gist现在也涵盖了数据类型uuid
,就像Paul评论的那样.(以及其他一些数据类型,非常enum
类型.)
现在您需要做的是:每个数据库安装一次扩展:
CREATE EXTENSION btree_gist;
Run Code Online (Sandbox Code Playgroud)
然后你的索引应该工作.
有关:
(原来的答复).
通常我会建议附加模块btree_gist,但类型uuid
是不覆盖它.
理论上,由于UUID a 128-bit quantity
(每个文档),最有效的方法是将其转换为两个bigint
或float8
用于索引.但是这些演员阵容都没有在标准的Postgres中定义.
我在pqsql-hackers列表中找到了朝这个方向刺,但似乎没有成功.
剩下的选项是表示的函数GiST索引text
:
CREATE INDEX idx_leaderboads_values_gist
ON leaderboard_entry USING gist (id_leaderboard, cast("value" AS text));
Run Code Online (Sandbox Code Playgroud)
要使用此功能索引,查询必须与该表达式匹配.您可以"value"::text
在查询中使用简写(但不能在索引定义中使用,而不添加更多括号).
问题是:为什么需要GiST指数.最好的解决方案取决于目标.
如果您使用的是 Postgres 10,并且使用转储/恢复从以前的版本迁移数据库,则可能需要运行:
ALTER EXTENSION btree_gist UPDATE;
Run Code Online (Sandbox Code Playgroud)
为了让要点索引与 UUID 一起使用。