首页 > 解决方案 > PostgreSQL 在列名上反转 ILIKE

问题描述

我试图通过前端找出给定的用户名是否是有效名称。我有一个包含很多名字的表。所以例如我得到了Adam18我需要实时给出答案(< 500ms)

我的查询:

SELECT * FROM names WHERE 'Adam18' ILIKE '%' || name || '%'

查询是正确的,但它使用顺序扫描

解释结果:

Seq Scan on names  (cost=0.00..2341.20 rows=527 width=516) (actual time=1.452..24.774 rows=12 loops=1)
    Filter: ('Adam18'::text ~~ (('%'::text || (name)::text) || '%'::text))
  Rows Removed by Filter: 105314
  Buffers: shared hit=498
Planning time: 0.062 ms
Execution time: 24.796 ms

有没有办法在这种情况下创建索引?

我目前的指数:

CREATE INDEX names_gin_idx ON names USING gin (name gin_trgm_ops)

我不能用这个。你能帮助我吗?

标签: databasepostgresqlindexingquery-optimizationsql-like

解决方案


推荐阅读