【发布时间】:2017-10-01 17:39:29
【问题描述】:
我有一个带有 users 表的 postgresql 数据库,其中每个用户都有一个名称(在 unicode 中)。我想查找名称中至少包含一个希伯来语字符的所有用户。我曾想过使用regex,例如
select * from users
where name ~ '[א-ת]';
有没有比正则表达式更有效的方法?我在名称列上有一个 B 树索引。
更新
通过@FuzzyTree 将pg_trgm 模块的不同索引用作suggested
B-tree GIST GIN
user 0.04 0.04 0.03
sys 0.02 0.04 0.01
total 0.06 0.08 0.04
关于磁盘大小,GIN 索引是 GIST 的 0.2 倍,是 B-tree 的 0.8 倍。所以,我们在这里有一个赢家,至少对于我的用例而言。 YMMV(例如,我没有对索引创建和更新进行基准测试)。版本:postgres 9.6。
【问题讨论】:
-
来吧,超过 2k 的代表,你应该已经是我们想要的,当你提供一些代码 sn-ps 时,你可能会得到更有用的答案。
-
@Jan,sn-p 干什么用的?我问的是 what 做什么,而不是 how 做什么。如果有帮助,我可以为我当前的正则表达式代码添加一个 sn-p。
标签: sql regex postgresql performance hebrew