zoukankan      html  css  js  c++  java
  • 碎片解决方案

    通过重新排列索引行和页面使物理和逻辑顺序相符来解决索引中的碎片,为了减少外部碎片,可以物理重排索引的叶子页面使其遵循索引逻辑顺序。

    1.卸载并重建索引

    卸载并且重建索引是最大限度的减少索引。这样完全为索引建立了新的页面并且用现有的数据填充这些页面。但不幸的是这样的缺点:

    阻塞,该方法增加了系统的开销。

    丢失索引,因为索引被卸载并且在等待重建的,对该表的查询将没有可用索引,这可能导致性能下降,索引因此会被计划进行修补。

    非聚族索引,如果卸载的是聚族索引,那么表上的所有非聚族索引必须在聚族索引卸载之后重建。聚族索引重建后非聚族索引又会重建。

    唯一性约束,用于定义主键或唯一性约束的索引不能用drop index删除,唯一性约束和主键都可能被外键约束。在主键卸载之前,所有与该主键关联的外键都要先删除。

    基于上述原因,卸载并重建索引对生产数据库尤其是在空闲之外是不建议使用的

    2.使用drop_existing 子句重建索引

    为了避免两次重建非聚族索引的开销,可以使用drop_existing子句,避免重新建立非聚族索引。因为行定位器使用的索引键值不变。

    create index ix_text on table(column) 

    with (drop_existing= on)

    可以为聚族索引和非聚族索引使用drop_existing,也可以将非聚族索引转换为聚族索引。但是不能将聚族索引转换为非聚族索引。该方法的缺点:

    阻塞,与卸载重建的方法类似。其他访问该表时候阻塞问题

    使用约束的索引,在使用drop_existing子句重建具有约束的索引,如果该约束是一个主键或与外键相关联的唯一性约束。在create语句中不能包含unique关键字。

    具有多个碎片化的索引的表,随着数据产生碎片,索引常常也碎片化。使用这种方式,那么要一一对表上的索引都要单独的确认和重建。

    3.执行alter index REBUILD

    物理上重建索引,他和drop_existing不同,它允许索引(支持主键或唯一约束)动态重建而不需要卸载再重建约束。缺点

    阻塞,

    事务回滚,alter index rebuild 是一个原子操作。如果他在结束前停止,所有到那为止的碎片整理都将丢失。

    4.alter index reorganize语句

    他减少索引的碎片而不重建索引。他按照索引键的逻辑顺序重新排列现有的索引叶子页面减少外部索引。他压缩页面中的行,减少内部碎片。他不会出现阻塞也没有原子性。


  • 相关阅读:
    mysql5.7初始化密码报错 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before
    Http2和Http1.X的区别
    gitlab的搭建
    nginx的四层负载均衡和七层负载均衡的区别
    阿里云NAT网关配置
    docker-compose的最简单安装方式
    最快的安装 jdk8的方法
    centos6上搭建gitlab
    大牛讲解信号与系统以及数字信号处理
    【推荐图书】+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3202795.html
Copyright © 2011-2022 走看看