温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

POSTGRESQL如何解决LIKE %%的问题

发布时间:2021-11-26 09:37:21 来源:亿速云 阅读:650 作者:小新 栏目:大数据

小编给大家分享一下POSTGRESQL如何解决LIKE %%的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

题目比Big mouth, 在POSTGRESQL 进入视野前,如果我们看到有程序员这样写

Select  name from employees where name like '%Chars%';  

并且这个表的行数在几百万行到千万行的水平,我们只能给写这个语句的人一句。

Are you lost your mind , 换句话就是 你是疯了吗?

世界不同了,队伍不好带,以前 ORACLE , SQL SERVER , MYSQL 都统一口径说,我们不支持这样  SB 的查询方式,你要不就 写成

select name from emplyees where name like '%Chars' 

要不就

select name from employees where name like 'Chars%'

如果非要如此,%% 的like查询,你不如去做全文索引。 就此就将这样的需求已 SB 的标签贴了几十年。 就连ORACLE 这样已经神话的数据库,也对此毫无作为。

“更多选择,更多欢乐”, 当然这欢乐不是给  ORALCE ,SQL SERVER ,MYSQL 这几个家伙的。因为到此为止,这几位,还是只能 TABLE SCAN 对待 like %% 这样的查询,而走不了索引。

POSTGRESQL ,面对几十年解决不了的问题,轻声的说了句,我试试吧

来我们看看POSTGRESQL 怎么能将别的数据库都做不到的事情,轻描淡写的就做完了。

首先我们先做一个实验,先建立一个表,

POSTGRESQL如何解决LIKE %%的问题

然后我们插入100的数据

POSTGRESQL如何解决LIKE %%的问题

我们看看我们插入了什么样的数据,以NAME 为字段的一堆无序的字符。

POSTGRESQL如何解决LIKE %%的问题

为了比较POSTGRESQL 在处理 LIKE %% 这样的数据和全表扫描的区别,我们也建立一个不使用POSTGRESQL 索引的数据表,来做一个对比

名字里面有一个 2 

POSTGRESQL如何解决LIKE %%的问题

通过POSTGRESQL 独有的GIN 索引,(这只是其中一种解决 LIKE %%方法,还有几种方法还可以面对更大无序的数据去做 like %%),至于更刺激的事情,还是找个机会下次说。

CREATE INDEX idx_employees_name_gin ON employees USING gin (name gin_trgm_ops);

POSTGRESQL如何解决LIKE %%的问题

索引建立完了,我们也需要开始做比较了

POSTGRESQL如何解决LIKE %%的问题

结果很明显,employees 1 在使用了 gin 索引后,查询的时间耗时 1.221ms  ,而如果不使用索引的情况下 我们要使用 68.484 ms 的时间。

POSTGRESQL如何解决LIKE %%的问题

有人可能有异议,说你的比较光是在POSTGRESQL 本身上做的,这不公平,你应该在MYSQL , SQL SERVER , ORACLE 最新版上都做一遍。

我只想说,当我看到100万的数据,在用LIKE %% 查询还能走索引,在一个破笔记本上的时间是 1.221ms,我已经毫无愿望在去测那些数据库了,毫无意愿, 而更可笑的是, 这样一个数据库他是免费的,比MYSQL 免费的还彻底。 面对 SQL SERVER  ORACLE  收取巨额费用,几十年了还解决不了这样like  %% 的问题。

看完了这篇文章,相信你对“POSTGRESQL如何解决LIKE %%的问题”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI