database - 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)
我不能用这个。你能帮助我吗?
解决方案
推荐阅读
- excel - 复制粘贴不同工作表范围内最新日期的价格
- webrtc - 如何使用 WebRTC 实现 TURN first ICE 连接?
- matlab - Matlab Voicebox代码中不兼容矩阵的来源
- ruby - 使用`bundle gem flob`时,为什么会创建一个与gem同名的目录?
- file-upload - rich:fileUpload 设置初始文件列表
- javascript - 获取和验证复选框和单选按钮的值
- scala - Scala:不可参数化提取器的解决方法
- javascript - Mongoose:按嵌套字段排序
- firebase - 在 Firebase Cloud Functions 中加密数据
- jenkins - 如何将用户输入的密码与凭据密码进行比较