我曾经读过,当数据库上有很多索引时,它会严重影响性能,但是在PostgreSQL文档中,我找不到任何关于它的信息。
我有一个很大的表,大约有100列和10亿行,而且经常需要在许多不同的字段中进行大量的搜索。
如果我添加许多索引(可能是10个唯一的列索引和5-7个三列索引),那么PostgreSQL表的性能会下降吗?
编辑:随着性能的下降,我指的是SELECT性能;数据库每月只更新一次,所以UPDATE和INSERT速度不是问题。
发布于 2012-10-04 20:01:33
不,查询性能不会受到很大影响,或者不会受到很大影响。索引在DML语句(和TRUNCATE)上进行更新,而在执行查询时可以使用索引,也可以不使用索引。
是否使用的决定是由规划师决定的。有了很多索引,我可以想象规划者花费更多的时间来选择可用的索引,但我希望差异很小。(通常情况下,规划比检索行更快。)
注意,通常几个索引会加速许多不同的查询。如果对许多列进行筛选,则可能不会出现这种情况。
还要注意的是,在很多情况下(而且不知道表的定义,就无法确定您的情况是否属于“大部分”),有这么多列反映了模式设计的不太理想。
发布于 2012-10-05 03:07:41
通常,您必须记住的是,在PostgreSQL中,索引扫描通常并不十分昂贵,但是与其他数据库相比,顺序扫描相对便宜(MySQL/InnoDB就是一个很好的例子)。所以,你不一定要索引所有的东西开始。
一般来说,我不认为过多的索引通常会影响select性能,但它们会影响insert和update性能。正如rfusca在他的评论中指出的那样,规划者有选择错误指数的危险。我还会认为,如果您有大量的索引,它可能会影响有效的缓存,但在很少更新的情况下,这可能不是一个值得关注的问题。
典型的建议仍然是好的:需要时添加索引,需要时才添加索引。但总体来说,在您的情况下,过多的索引不会损害select的性能,这是很好的。
https://dba.stackexchange.com/questions/25449
复制相似问题