• 保持索引的健康


    • 概述

    对于数据库的索引,最典型的描述,便是以书本的目录为比喻了.在许多场景下,使用索引,可以帮助程序更加快速地定义到需要的所需的数据.

    然而,对于数据库而言而言.数据表的记录并不会一层不变,可以通过许多途径对表数据进行插入、更新、删除等操作。表数据的这些操作,以数据为依据的索引,在数据更新的过程中,同样需要做到与数据的更新同步(当然,还包括一些统计信息等数据库内部评估使用的信息的自动更新等)。当索引的节点在数据插入,删除或者更新的时候,需要在索引结构中按其排列顺序进行节点位置的更新,数据库为了确保更快速地更新索引,使用最快速的算法进行索引信息的同步,即,对索引页中数据的移动,在索引页空间不足的情况下,还需要对索引页进行拆分,从而造成了许多索引碎片。

    • 分析

    索引碎片的分析,在SQL Sever 2000中,保罗大师为我们提供了DBCC SHOWCONTIG工具。因为现在基本上使用的是SQL Server 2005,所以就使用保罗提供的另外一个更好用的工具DMV sys.dm_db_index_physical_stats进行分析。

    select ix.name,--索引名称
    	ps.index_type_desc,--索引类型
    	alloc_unit_type_desc,--存储单元类型(行内数据,溢出行,大数据行)
    	index_depth,--索引深度
    	avg_fragmentation_in_percent,--索引碎片的百分比,>=30,便需要考虑重建索引
    	avg_fragment_size_in_pages--索引碎片在索引页中的数量
    from sys.dm_db_index_physical_stats(db_id('DbName'),object_id('TableName'),null,null,'Sampled') ps
    	join sys.indexes ix on ps.[object_id] = ix.[object_id] and ps.index_id = ix.index_id
    如下图中所示, 是一个简单表的示例.
    image 
     
    更多动态请关注微信公众号 dbagrant
  • 相关阅读:
    下标处理问题
    C++输入输出流
    gcc和gdb
    B2C、C2C电子商务分析
    转载:java 动态代理学习(Proxy,InvocationHandler)
    Java Web开发中路径问题小结
    64位操作系统IIS降为32 位版本运行处理
    SQL Server 2000/2005 数据库分页
    iBatis简单入门教程
    JAVA中的Class类
  • 原文地址:https://www.cnblogs.com/laoyumi/p/1780692.html
Copyright © 2020-2023  润新知