在PostgreSQL表中创建多个索引的缺点

dev*_*ev9 5 database postgresql indexing performance database-design

在阅读我认为的索引文档之后

嘿,因为(在我的情况下)几乎总是从数据库读取比写入它更频繁地执行,为什么不在表中的大多数字段上创建索引?

这是正确的态度吗?除了插入更长时,还有其他任何缺点吗?

当然,索引将仅限于我在SELECT语句条件下实际使用的字段.

Mur*_*nik 8

索引有几个缺点.
首先,他们消耗空间.这可能是无关紧要的,但如果您的桌子特别大,可能会产生影响.
其次,更重要的是,您需要记住索引在INSERT处理新行,DELETE旧行或UPDATE索引列的现有值时会有性能损失,因为现在DML语句不仅需要修改表的数据,而且指数也是一个.再次,这在很大程度上取决于您的应用程序用例.如果DML非常罕见以至于性能不成问题,那么这可能不是一个考虑因素.
第三(虽然这与我的第一点紧密相关),请记住,每次创建另一个数据库对象时,都会产生额外的维护开销 - 这是您必须偶尔重建的另一个索引,收集统计信息(取决于RDBMS)你正在使用的另一个目标是打击数据字典等.

底线全部归结为您的用例.如果您有经常运行的重要查询,并且可以通过此索引进行改进 - 那就去做吧.如果您在蓝色月亮中运行此查询一次,您可能不希望减慢所有INSERT语句的速度.

  • 索引*也可以*加速`DELETE`或`UPDATE`语句,不仅减慢速度. (2认同)