数据库
首页 > 数据库> > 如何判断何时该在 Oracle 中重新生成索引?

如何判断何时该在 Oracle 中重新生成索引?

作者:互联网

每隔一段时间,我们就需要在Oracle中重新生成索引,因为随着时间的推移,索引变得支离破碎。 这会导致它们的性能以及扩展的数据库查询性能下降。 因此,不时地重新生成索引会非常有益。 话虽如此,索引不应该经常重新生成,因为这是一项资源密集型任务。 更糟糕的是,当重新生成索引时,锁将被放置在索引上,从而阻止任何人在重新生成期间访问它。 任何尝试访问此索引以返回所需结果的查询都将被暂时阻止,直到重新生成完成。

在今天的博客中,我们将学习建立索引的频率以及如何确定何时需要重新生成索引。

下载Navicat for Oracle最新版

重新生成搜索引擎的频率

如引言中所述,重新生成索引既耗费资源又是阻塞任务。 这两方面的考虑使它成为脱机活动的理想选择,该活动可在访问数据库的用户尽可能少的情况下运行。 通常,这意味着在计划的维护时段内。

针对何时以及多长时间重新生成一次索引,制定一个全面的计划实际上是不可行的。 这些决定在很大程度上取决于您使用的数据类型以及所使用的索引和查询。 考虑到这一点,这里有一些有关何时重新生成索引的准则:

确定是否需要重新生成索引

在Oracle中,您可以使用ANALYZE INDEX VALIDATE STRUCTURE命令来了解索引的当前状态。 以下是INDEX_STATS表的一些示例输出:

 SQL> ANALYZE INDEX IDX_GAM_ACCT VALIDATE STRUCTURE;
  Statement processed.
   
  SQL> SELECT name, height,lf_rows,lf_blks,del_lf_rows FROM INDEX_STATS;
   
  NAME          HEIGHT      LF_ROWS    LF_BLKS    DEL_LF_ROW
  ------------- ----------- ---------- ---------- ----------
  DX_GAM_ACCT        2          1          3          6 
   
  1 row selected.

有两个经验法则可以帮助确定是否需要重新生成索引:

  1. 如果索引的高度大于四,则重新生成索引。
  2. 删除的叶行应少于20%。

重新生成索引

在Oracle中,您可以使用Alter Index Rebuild命令来重新生成索引。 它重新生成空间索引或分区索引的指定分区。

ALTER INDEX REBUILD命令具有以下几种形式:

ALTER INDEX [schema.]index REBUILD [PARAMETERS ('rebuild_params [physical_storage_params]' ) ] [{ NOPARALLEL | PARALLEL [ integer ] }] ;
或者
ALTER INDEX [schema.]index REBUILD  
     [PARAMETERS ('rebuild_params [physical_storage_params]' ) ] 
     [{ NOPARALLEL | PARALLEL [ integer ] }] ;

或者

ALTER INDEX [schema.]index REBUILD PARTITION partition  
     [PARAMETERS ('rebuild_params [physical_storage_params]' ) ];

处理无法使用的索引

Navicat for Oracle的维护索引工具提供了两个有用的选项来处理无法使用的索引:

总结

在今天的博客中,我们了解了建立索引的频率以及如何确定何时需要重新生成索引。

如果您想了解有关Navicat for Oracle的更多信息,请访问产品页面

标签:INDEX,何时,生成,索引,params,重新,Oracle
来源: https://blog.csdn.net/qq_42444778/article/details/114626901