【发布时间】:2014-03-12 01:08:26
【问题描述】:
我在 postgres 中有一个大约 200 万条记录的表。我需要为其提供一些索引,以便它为like %text% 查询提供良好的性能。
我在某处读到 Gin 索引适合 %text% 搜索,因此尝试了 Gin 和 Gist 索引,但不知道为什么没有这样的性能提升,而且 Gin 索引使用顺序扫描而不是堆扫描。
这是我的杜松子酒指数:
CREATE INDEX city_gin_idx_name
ON city
USING gin
(to_tsvector('english'::regconfig, lower(name::text)));
查询性能:
“排序(成本=117553.00..118496.71行=377482宽度=50)(实际 时间=1719.660..1745.702 行=35185 循环=1)" " 排序键: (concat(name, ', ', state_name, ', ', country_name))" " 排序方法: 外部合并磁盘:2200kB" " -> 城市序列扫描 (成本=0.00..56777.75 行=377482 宽度=50)(实际 时间=0.392..1474.559 行=35185 循环=1)"" 过滤器: ((lower((name)::text) ~~ '%ed%'::text) 或 ((city_metaphone)::text = 'K'::text))" " 过滤器删除的行数:1851806" "总运行时间: 1764.036 毫秒"
请告诉我任何适合此要求的索引。
【问题讨论】:
-
能否请您正确格式化执行计划(保留缩进)? (例如使用
<pre>标签)因为它不是真正可读的。或者上传到explain.depesz.com
标签: postgresql indexing