我试图提高Oracle 11g中视图的性能,该视图连接了11个表,查询中最大的3个表是40、27、19兆行。我发现每个大表都有超过80个不同的索引。此外,我怀疑数据库服务器缺乏内存。我知道许多索引会损害更新、插入和删除操作的性能。我想知道这么多索引是否会降低复杂的SELECT查询的性能?
发布于 2016-02-03 14:53:50
对我来说,太多的索引意味着插入、更新或删除行成本更高。因为,如果索引有任何用处,就需要维护它们。查找所有列的索引,这些列要么不查询,要么不经常查询,然后删除它们。查找列相同的所有索引,但以不同的顺序删除这些索引的所有版本(只有一个版本)。例如,一个好的索引应该从低基数开始,并变得更具体。例如,国家,州,城市,邮政编码。另一种很好的方法是,如果以日期和其他字段为首的日期列搜索以首先消除最大行数,则选择其他字段匹配的值。试着将索引的数量减少到每个表少于10个。
尽管有用的索引数量取决于这是OLTP、DSS还是数据仓库。
发布于 2020-10-24 01:41:08
正如JSapkota的评论所说,StackOverflow上存在答案:
指数实际上能降低选择性能吗?是的,虽然非常轻微如果您的索引可能被考虑为查询,但无法使用,优化器将花费很短的时间来思考是否使用和如何使用它(在非常复杂的索引和视图的很少情况下,如果索引性能提示错误,则可能最终选择次优查询计划)。
上述引文中的“短时间”通常在微秒范围内,最坏的情况下只有几毫秒。
另一方面:
过多的索引会导致exec计划稳定性的问题。.i.e。当Oracle突然“在没有警告的情况下更改执行计划”时,您可能会遇到问题。这也可能是一个迹象,过去曾出现过性能问题,有人试图解决这些问题,却不知道到底发生了什么。ibre5041
所以也许你应该花点时间寻找未使用的索引。
https://dba.stackexchange.com/questions/128145
复制相似问题