索引及表碎片

索引基本概念:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。(引用)

表碎片基本概念:

内部碎片:为了有效的利用内存,使内存产生更少的碎片,要对内存分页, 内存以页为单位来使用,最后一页往往装不满,是  形成了内部碎片。(引用)

外部碎片:为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后, 有一个4k的段进来放到原来5k的地方,于  是形成1k的外部碎片。(引用)

創建索引:

(1)創建聚集索引:    
    CREATE UNIQUE CLUSTERED INDEX [IndexName] ON [dbo].[TableName]([columnName])--唯一聚集索引
    CREATE CLUSTERED INDEX [IndexName] ON [dbo].[TableName]([columnName])--聚集索引
(2)創建非聚集索引:
    CREATE NONCLUSTERED INDEX [IndexName] ON [dbo].[TableName] ([columnName1])INCLUDE ([columnName2],[columnName2],[columnName2])

注:索引的填充因子由讀寫比例決定(例:填充因子=80%,那么單個數據頁中數據填充為80%,剩餘20%用於寫)

刪除索引:

DROP INDEX [TableName].[IndexName]|[ViewName].[IndexName1][IndexNameN]

查詢表索引:

sp_helpindex [TableName]

查詢數據庫所有表碎片情況:

SELECT object_name(a.object_id) [TableName] ,a.index_id,name [IndexName] ,page_count as 索引或數據頁總數,fragment_count as 分配單元的頁級別中的碎片數,index_level as 索引級別,avg_fragment_size_in_pages as 碎片平均頁數,
avg_fragmentation_in_percent as 逻辑碎片索引中的无序页的百分比,avg_page_space_used_in_percent as 表空間使用率 FROM sys.dm_db_index_physical_stats ( DB_ID() , object_id('') , object_id(''), NULL,'DETAILED' ) AS a  JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id order by avg_fragmentation_in_percent desc
sys.dm_db_index_physical_stats 參數說明:
DB_id--要查看索引所在数据库,当前数据库ID我们可以用db_id()函数来取到
object_id--要查索引所在表的id,比如我们要查看表T1,可以用object_id('T1')来取到该表的ID
index_id--要查看索引的索引号,该索引也同样可以用object_id('索引名')来获取
partition_number--对象中的分区号
mode--函数的执行模式将确定为了获取此函数所使用的统计信息数据而执行的扫描级别(默認
      LIMITED:模式运行最快,扫描的页数最少。对于堆,它将扫描所有页,但对于索引,则只扫描叶级上面的父级别页。 
      SAMPLED:模式将返回基于索引或堆中所有页的 1% 样本的统计信息。如果索引或堆少于 10,000 页,则使用DETAILED模式代替 SAMPLED。 
      DETAILED:模式将扫描所有页并返回所有统计信息)

表碎片整理:

--(1)重组有碎片的索引:执行下面的命令
ALTER INDEX ALL ON TBSF_Table_Field_Directory REORGANIZE -- (30%>=avg_fragmentation_in_percent >5%)
--(2)重建索引:执行下面的命令
ALTER INDEX ALL ON TBSF_SysMonitorMsgSetting REBUILD WITH (ONLINE = ON) -- (30%>=avg_fragmentation_in_percent >5%)
--例:使用ALTER TABLE [TableName] REBUILD 減小HEAP表空间(也可一定程度降低外部碎片(堆碎片))
ALTER TABLE TBSF_SysMonitorMsgSetting REBUILD

注意:重新生成或重新组织小索引不会减少碎片。 小索引的页面有关存储在混合盘区中。 混合区最多可由八个对象共享,因此在重新组织或重新生成小索引之后可能不会减少小索引中的碎片。


最後:寫的很簡潔並不一定準確,有錯的話歡迎提出,方便我改正,謝謝!!



猜你喜欢

转载自blog.csdn.net/qq_24886681/article/details/80392514