众所周知,在PostgreSQL中部分一致和后方一致都是使用不了索引的。
后方一致可以把字段反转后定义一个函数索引来解决。
而部分一致就貌似没有办法了。
比如有一致user表。一般查询都是user关联一大堆其他的表。
如果条件是用户名部分一致,一般的写法是 AND user.user_name like '%输入的关键字%'
最近在调查一个性能问题的时候(user inner join或者left join一大堆其他表),发现加入AND user.user_name like '%输入的关键字%'条件后变慢很多。
本来想着没啥问题的,为什么变慢呢?
查看实行计划等想着还有其他办法来实现部分一致吗?
通过position函数可以替代like。例:AND position('输入的用户名关键字' in user.user_name) > 0
发现性能快了很多。查看实行计划发现表结合的顺序发生了变化。
这个地方并不是说AND position('输入的用户名关键字' in user.user_name) > 0的性能就一定比like好,而是需要具体问题具体分析。
提供一种like查询的变通方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。