我已经读过,当在数据库上有很多索引时它会严重损害性能但是在PostgreSQL文档中我找不到任何关于它的信息。
我有一个非常大的表,有100列和10亿行,我经常需要在很多不同的领域进行大量的搜索。
如果添加大量索引(可能是10个唯一列索引和5个或7个3列索引),PostgreSQL表的性能是否会下降?
编辑:性能下降是指获取行(select)的性能,数据库将每月更新一次,因此更新和插入时间不是问题。
答案 0 :(得分:7)
当表的内容被修改时(即INSERT
,UPDATE
,DELETE
)
PostgreSQL的查询规划器可以决定何时使用索引以及何时不需要索引,顺序扫描更为理想。
因此索引太多会损害修改性能,而不是提取。
答案 1 :(得分:1)
必须在涉及这些列的每个insert
和update
更新索引。
答案 2 :(得分:0)
我的网站上有一些图表:http://use-the-index-luke.com/sql/dml
索引是纯冗余。它仅包含也存储的数据 在表中。在写操作期间,数据库必须保留这些操作 冗余一致。具体来说,它意味着插入,删除 并且更新不仅会影响表,还会影响持有的索引 受影响数据的副本。
章节标题表明了索引可能产生的影响:
插入 - 不能直接从索引中获益
删除 - 使用where子句的索引
更新 - 不会影响表的所有索引