Fal*_*gel 3 postgresql index index-tuning gist-index gin-index
我正在使用带有 *pg_trgm* 扩展名的 Postgresql 9.1。我需要在基于文本的字段上创建索引。我不需要全文搜索,我使用ILIKE查询来进行搜索。
我会用pg_trgm,但不具有太多的经验gin和gist索引。我会有很多INSERT报表(每天约 15000 条)和很少的UPDATE报表(可能是一周内 1 条或 2 条)。
gin此类表上的索引的索引更新开销是多少?还是gist更合适?
pg_trgm 模块的手册在这里为您的问题提供了一些建议:
根据经验,GIN 索引的搜索速度比 GiST 索引快,但构建或更新速度较慢;所以 GIN 更适合静态数据,而 GiST 更适合经常更新的数据。
FASTUPDATEGIN 索引的特性(在 Postgres 8.4 中引入,默认为 ON)应该会让你感兴趣。INSERT(和 UPDATE)存储在挂起列表中,并通过VACUUM. 使这些操作更快,因为直接 GIN 维护往往很昂贵,特别是对于具有许多可索引元素的列,即在您的情况下有很多单词。
此处的手册中有关 GIN 与 GiST 的更多基本建议。
特别是,如果您的行很大并且您批量插入,您可能需要提高work_mem设置。
对于非常大的负载(表的大部分),可能需要删除索引并在之后重新创建它。
虽然,15k 行分布在一天内,但根本不应该是问题。
最后,全文搜索部分有一整章关于 GIN 和 GiST 的性能。一般适用。读这个。
它的要点(没有双关语):GIN 更大,维护成本更高,但对于大多数查找来说更快(特殊例外适用于 pg_trgm)。由于添加FASTUPDATE写入只是稍微昂贵一些。
| 归档时间: |
|
| 查看次数: |
844 次 |
| 最近记录: |