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