postgresql 模式索引未在我的postgres查询中使用

ruarlubt  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(1)|浏览(119)

我的疑问是

SELECT * 
FROM all_persons
WHERE ((("email") ilike ('abc.com%')))
ORDER BY "lastOrderAt" DESC
OFFSET 0 LIMIT 20

我已经在emailvarchar_pattern_ops列的表上添加了索引。
使用explain我发现索引没有被使用。有人能指导我索引是错误创建的吗?或者我如何加快查询速度?

byqmnocz

byqmnocz1#

varchar_pattern_ops区分大小写。因此它不支持ILIKE。
你可以确保列都是小写的,确保模式也都是小写的,然后只使用LIKE而不是ILIKE。或者你可以将它们转换为小写,并让它使用一个函数索引。
或者你可以使用一个trigram索引(https://www.postgresql.org/docs/current/pgtrgm.html),它支持ILIKE,但是如果通配符总是在模式的末尾,那么它的效率将低于btree。

相关问题