Edd*_*die 6 postgresql symfony doctrine-orm doctrine-orm-postgres
我有带有城市列表 (>1M) 的 postgreSQL 表,我需要通过像“abc%”这样的模式搜索这个表。我在city.name列上创建了 B 树索引,这是我得到的:
EXPLAIN SELECT * FROM city WHERE NAME ~~* '???%'
Seq Scan on city (cost=0.00..44562.62 rows=117 width=131)
Run Code Online (Sandbox Code Playgroud)
和确切的选择:
EXPLAIN SELECT * FROM city WHERE NAME = '??????'
Index Scan using city_name_idx on city (cost=0.43..12.33 rows=2 width=131)
Run Code Online (Sandbox Code Playgroud)
有没有办法使用标准索引在第一次选择时获得良好的性能?
我正在使用 Symfony2/Doctrine2,所以在这里实现特定于数据库的东西不是很容易(而且我不想)。
Dan*_*ité 10
要加快速度LIKE(区分大小写),请创建如下索引:
create index indexname on city (name text_pattern_ops);
Run Code Online (Sandbox Code Playgroud)为了加速ILIKE或~~*,除了LIKE,假设 PostgreSQL 9.1 或更新版本,创建一个这样的索引:
create index indexname on city using gin(name gin_trgm_ops);
Run Code Online (Sandbox Code Playgroud)
gin_trgm_ops由pg_trgm扩展提供,如果数据库中尚未存在,则应添加该扩展。
| 归档时间: |
|
| 查看次数: |
2342 次 |
| 最近记录: |