PostgreSQL SELECT的速度是否受到表中过多索引的不利影响?

时间:2012-09-27 19:24:01

标签: postgresql indexing

我已经读过,当在数据库上有很多索引时它会严重损害性能但是在PostgreSQL文档中我找不到任何关于它的信息。

我有一个非常大的表,有100列和10亿行,我经常需要在很多不同的领域进行大量的搜索。

如果添加大量索引(可能是10个唯一列索引和5个或7个3列索引),PostgreSQL表的性能是否会下降?

编辑:性能下降是指获取行(select)的性能,数据库将每月更新一次,因此更新和插入时间不是问题。

3 个答案:

答案 0 :(得分:7)

当表的内容被修改时(即INSERTUPDATEDELETE

,维护索引

PostgreSQL的查询规划器可以决定何时使用索引以及何时不需要索引,顺序扫描更为理想。

因此索引太多会损害修改性能,而不是提取。

答案 1 :(得分:1)

必须在涉及这些列的每个insertupdate更新索引。

答案 2 :(得分:0)

我的网站上有一些图表:http://use-the-index-luke.com/sql/dml

  

索引是纯冗余。它仅包含也存储的数据   在表中。在写操作期间,数据库必须保留这些操作   冗余一致。具体来说,它意味着插入,删除   并且更新不仅会影响表,还会影响持有的索引   受影响数据的副本。

章节标题表明了索引可能产生的影响:

  

插入 - 不能直接从索引中获益

     

删除 - 使用where子句的索引

     

更新 - 不会影响表的所有索引