mysql Postgres中带前导通配符的反向字符串扫描

cygmwpex  于 2022-10-31  发布在  Mysql
关注(0)|答案(1)|浏览(174)

SQL Server: Index columns used in like?
我已经尝试使用上面链接中的查询方法与Postgres(0.3ms的改进),它似乎只适用于MySQL(10倍快)。
MYSQL语言

User Load (0.4ms)  SELECT * FROM users WHERE reverse_name LIKE REVERSE('%Anderson PhD')
User Load (5.8ms)  SELECT * FROM users WHERE name LIKE ('%Anderson Phd')

海报

User Load (2.1ms)  SELECT * FROM users WHERE reverse_name LIKE REVERSE('%Scot Monahan')
User Load (2.5ms)  SELECT * FROM users WHERE name LIKE '%Scot Monahan'

做了一些谷歌搜索,但不能完全理解,因为我是相当新的数据库。有人能解释为什么会发生这种情况吗?

4xrmg8kj

4xrmg8kj1#

要在Postgres中支持字符类型列的前缀匹配,您需要一个带有合适运算符类的索引:text_pattern_ops(用于文本等)(除非您使用“C”语言环境...)
或者你使用一个三元组索引来支持 * 任何 * 模式--那么你就不再需要“反向”技巧了。
请参阅:

  • PostgreSQL LIKE查询性能变化

一旦索引可以用于查询,您将看到对于非平凡大小的表的 * 巨大 * 性能改进。

相关问题