【发布时间】:2018-02-18 14:39:30
【问题描述】:
我有一个表用户,它包含位置列。我已经使用 varchar_pattern_ops 索引了位置列。但是当我运行查询计划器时,它告诉我它正在执行顺序扫描。
EXPLAIN ANALAYZE
SELECT * FROM USERS
WHERE lower(location) like '%nepa%'
ORDER BY location desc;
结果如下:
Sort (cost=12.41..12.42 rows=1 width=451) (actual time=0.084..0.087 rows=8 loops=1)
Sort Key: location
Sort Method: quicksort Memory: 27kB
-> Seq Scan on users (cost=0.00..12.40 rows=1 width=451) (actual time=0.029..0.051 rows=8 loops=1)
Filter: (lower((location)::text) ~~ '%nepa%'::text)
Planning time: 0.211 ms
Execution time: 0.147 ms
我已经通过 stackoverflow 进行了搜索。发现大多数答案类似于“postgres 在大表中执行顺序扫描,以防索引扫描会变慢”。不过我的桌子也不大。
我的users 表中的索引是:
"index_users_on_lower_location_varchar_pattern_ops" btree (lower(location::text) varchar_pattern_ops)
发生了什么事?
【问题讨论】:
标签: sql postgresql indexing database-design pattern-matching