首页 > 管理索引表:深入研究B树索引--重建,合并,删除(理论篇3)

管理索引表:深入研究B树索引--重建,合并,删除(理论篇3)

重建索引

  如果表中记录频繁地被删除或插入,尽管表中的记录总量保持不变,索引空间的使用量会不断增加。虽然记录从索引中被删除,但是该记录索引项的使用空间不能被重新使用。因此,如果表变化不定,索引空间量会不断增加,不论表中记录数量是否增加,这是因为索引中无效空间会增加。 要回收那些曾被删除记录使用的空间,需要使用Alter index rebuild命令。

  重建索引有两种方法:一种是最简单的,删除原索引,然后重建;第二种是使用ALTER INDEX … REBUILD命令对索引进行重建。

需要重建判断依据:

  1.height >4

  2.pct_used < 50%

  3.del_lf_rows / lf_rows +0.001 > 0.03

合并索引

  合并索引只是简单地将B树叶子节点中的存储碎片合并到一起,并不会改变索引的物理结构。

合并索引和重建索引都可以清理索引数据块中的碎片,但是又有区别:

合并索引:

  1.不能将索引移动到其他表空间

  2.代价比较低,不需要使用额外的存储空间

  3.只能在B树的同一子树种进行合并,不会改变树的高度

  4.可以快速释放叶子节点中未使用的存储空间

重建索引:

  1.可以将索引移动到其他的表空间

  2.代价比较高,需要使用额外的存储空间

  3.重建整个B树,可以降低B树的高度

  4.可以快递更改索引存储参数,如果在重建中指出了ONLINE关键字,还可以再重建索引时使用索引。

删除索引

  1. 应用程序不再需要索引时,可将索引删除。

  2. 在大量加载数据前,先删除索引,加载后再重新创建索引,这样做的好处有:

    – 提高加载性能

    – 更有效地使用索引空间

  3. 仅定期使用的索引无需不必要的维护,尤其在基于易失表时更是如此。这是 OLTP 系统中的通常情况,在该系统中,年末或季度末会生成特殊的查询,以收集在总结会上使用的信息。

  4. 当在某种类型的操作(如加载)期间出现例程失败时,可能会将索引标记为INVALID。在这种情况下,需要删除并重建索引。

  5 索引已损坏。

  不能删除约束所需的索引,因此,必须先禁用或删除相关的约束。

转载于:https://www.cnblogs.com/polestar/archive/2012/04/27/2473608.html

更多相关:

  • 一、视图(Views)与 同义词   1、视图:实际上是对查询结果集的封装,视图本身不存储任何数据,所有的数据都存放在原来的表中;      在逻辑上可以把视图看作是一张表   2、作用: 封装查询语句,简化复杂的查询需求屏蔽表中的细节  3、语法:  create [or replace] view 视图的名称 as 查询语句...

  • explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 虽然这篇文章我写的很长,但看起来真的不会困啊,真的都是干货啊!!!! 先解析一条sql语句,看出现什么内容 EXPLAIN SELECT s.uid,s.username,s.name,f.email,f.mob...

  • 其实SQL能力很差劲,简单查询还成,复杂查询以及优化,基本脑子里没有概念。了解一下概念,然后打算找本理论书好好看看。 先到处找了些优化的sql,整理出来,记录一下。     1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引。     2、应尽量避免在where 子句中对字段进行n...

  • 原文地址:oracle索引的简单总结作者:kindle一、索引的概念:     数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。 二、索引的特点:     1.索引可以加快数据库的检索速度     2.索引降低...

  • 强化学习(六) - 连续空间中的强化学习6.1 连续空间中的强化学习6.2 离散空间和连续空间6.3 离散化实例:小车上山6.3.1 相关程序6.3.2 程序注解(1) 环境测试(2) 离散化(3) 模型训练(4) 模型优化...

  • JavaScript 的命名空间并不是真正的命名空间, 只是在脚本内部创建一个封闭的小空间, 必须通过特定的空间名称才能对空间内部的代码进行访问, 这样可以防止同名函数和变量发生冲突, 也可以更方便地管理代码, 就像 .NET 的命名空间 (namespace) 和 Java 的包 (package) 一样. 为什么需要命名空间...

  • 线元决定空间,通过定义时空线元,获得闵氏空间:     转载于:https://www.cnblogs.com/YouXiangLiThon/p/9907552.html...

  • sql数据库系统表,常用的(sysobjects,sysindexes,sysindexkeys,SYSCOLUMNS,SYSTYPES 及更多解释说明): https://docs.microsoft.com/zh-tw/previous-versions/sql/sql-server-2012/ms177596(v%3dsql....

  • ----------siwuxie095             1、概述 2、栈空间 3、堆空间          1、概述            (布尔类型如果作为单个变量存储数据将占用 4 个字节,如果作为数组中的某个元素只占用 1 个字节)                〔计算机存储数据分为三个空间:寄存器、栈空间、堆空间。...