我看到无法使用的索引使查询性能降低了4个小时以上...
通常,不可用的索引会减慢查询速度吗?在什么情况下它将改善性能。
谢谢。
在创建索引或索引的某些分区或子分区UNUSABLE
时,不会为不可用的对象分配任何段。无法使用的索引或索引分区不占用数据库空间。
有关更多文档,请参见以下链接:
您可以检查query optimizer
计划或query execution
计划以检查查询的性能。
在表上具有许多索引会降低DML性能,因为数据库还必须更新索引。索引可以是可用的(默认)或不可用的。 DML操作不会维护不可用的索引,优化器会忽略它。无法使用的索引可以改善大容量负载的性能。
我可以看到您可以尝试以下两种情况:
1) Deleting from large table without having index
Drop indexes
-在批量删除之前删除索引并在之后重新构建索引可以提高删除性能,因为每个单独的删除都必须将自己从索引中删除,从而导致速度变慢。 Oracle删除索引条目而无需重新平衡索引树(“逻辑删除”),但这仍然很耗时,尤其是在目标表上有很多索引的情况下
2) Parallel Delete
您还可以使用并行dml检查删除查询的性能:
ALTER SESSION ENABLE PARALLEL DML;
DELETE /*+ parallel(table,20) */
FROM table
然后您可以从以上两种情况中确定哪种方法对删除查询的运行速度更快