在 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
.
查看查询计划
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
.