在 Postgres 中使用前导通配符扫描反向字符串

Reverse string with leading wildcard scan in Postgres

SQL Server: Index columns used in like?

我试过在 Postgres 中使用上面 link 中的查询方法(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')

POSTGRES

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'

进行了一些谷歌搜索,但不太理解,因为我对数据库还很陌生。谁能解释为什么会这样?

为了在 Postgres 中支持字符类型列的前缀匹配,您需要一个具有合适运算符的索引 class:text_pattern_ops 用于文本等(除非您的数据库使用 "C" 语言环境,这并不常见。)

或者您使用三元组索引来支持 任何 模式 - 那么您就不再需要 "reverse" 技巧了。

此相关问题的详细信息:

  • PostgreSQL LIKE query performance variations

一旦索引可用于查询,您就会看到大规模 对 none 大小的表的性能改进。使用 EXPLAIN.

查看查询计划