午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術文章
文章詳情頁

SQLServer 表的索引碎片查詢和處理

瀏覽:148日期:2023-05-02 10:03:18
目錄
  • 1.查看索引的碎片率
  • 2.reorganize索引
  • 3.rebuild索引
  • 4.rebuild表上所有的索引
  • 5.rebuild數據庫中所有的索引  

1.查看索引的碎片率

SELECT object_name(ips.object_id) AS TableName, ips.index_id, name AS IndexName, 
avg_fragmentation_in_percent,db_name(ips.database_id) AS DatabaseName
FROM sys.dm_db_index_physical_stats
    (Db_id(DB_NAME())
, NULL
, NULL
, NULL
, NULL) AS ips
INNER JOIN sys.indexes AS SI ON ips.object_id = SI.object_id AND ips.index_id = SI.index_id
WHERE ips.avg_fragmentation_in_percent > 5 AND SI.index_id <> 0

索引的碎片率低于5%或者,索引的頁數少于1000,可以忽略;
索引碎片率在5%-30%之間的,建議reorganize;
索引碎片率大于30%的,建議rebuild。

2.reorganize索引

alter index [索引名] on [dbo].[表名] reorganize;

3.rebuild索引

alter index [索引名] on [dbo].[表名] rebuild;

4.rebuild表上所有的索引

alter index all on [dbo].[表名] rebuild;

5.rebuild數據庫中所有的索引  

USE [數據庫名]
GO
DECLARE @NoOfPartitions BIGINT;
DECLARE @objectid INT;
DECLARE @indexid INT;
DECLARE @idxname NVARCHAR(255);
DECLARE @objname NVARCHAR(255);
DECLARE @partitionnum BIGINT;
DECLARE @schemaname NVARCHAR(255);
DECLARE @partitions BIGINT;
DECLARE @frag FLOAT;
DECLARE @statement VARCHAR(8000);
-- checking existance of the table that we create for temporary purpose
IF OBJECT_ID("defrag_work", "U") IS NOT NULL
  DROP TABLE defrag_work;
-- Copy the fragmented indexes data into defrag_work table
-- All the indexes that has fragmentation < 5 are getting stored into our work table
SELECT  [object_id] AS objectid ,
index_id AS indexid ,
partition_number AS partition_no ,
avg_fragmentation_in_percent AS frag
INTO    defrag_work
FROM    sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, "LIMITED")
WHERE   avg_fragmentation_in_percent >5.0 and index_id > 0;
-- cursor to process the list of partitions
DECLARE partitions CURSOR
FOR
    SELECT  *
    FROM    defrag_work;
-- Open the cursor.
OPEN partitions;
-- Looping through the partitions
FETCH NEXT
   FROM partitions
   INTO @objectid, @indexid, @partitionnum, @frag;
WHILE @@FETCH_STATUS = 0
    BEGIN;
SELECT  @objname= QUOTENAME(so.name) ,
@schemaname = QUOTENAME(ss.name)
FROM    sys.objects AS so
JOIN sys.schemas AS ss ON ss.schema_id = so.schema_id
WHERE   so.object_id = @objectid;
SELECT  @idxname = QUOTENAME(name)
FROM    sys.indexes
WHERE   object_id = @objectid
AND index_id = @indexid;
SELECT  @NoOfPartitions = COUNT(*)
FROM    sys.partitions
WHERE   object_id = @objectid
AND index_id = @indexid;
/*
Let"s say N = fragmentation percentage
N <= 5 = IGNORE
5 < N < 30 = REORGANIZE
N > 30 = REBUILD
*/
IF (@frag < 30.0) -- @frag > 5 is already filtered in our first query, so we need that condition here
    BEGIN;
SELECT  @statement = "ALTER INDEX " + @idxname + " ON "
+ @schemaname + "." + @objname + " REORGANIZE";
IF @NoOfPartitions > 1
    SELECT  @statement = @statement + " PARTITION="
    + CONVERT (CHAR, @partitionnum);
EXEC (@statement);
    END;
IF @frag >= 30.0
    BEGIN;
SELECT  @statement = "ALTER INDEX " + @idxname + " ON "
+ @schemaname + "." + @objname + " REBUILD";
IF @NoOfPartitions > 1
    SELECT  @statement = @statement + " PARTITION="
    + CONVERT (CHAR, @partitionnum);
EXEC (@statement);
    END;
PRINT "Executed " + @statement;
FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum,
    @frag;
    END;
-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;
-- drop the table
IF OBJECT_ID("defrag_work", "U") IS NOT NULL
  DROP TABLE defrag_work;

到此這篇關于SQLServer 表的索引碎片查詢和處理的文章就介紹到這了,更多相關SQLServer 表索引碎片內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: MsSQL
主站蜘蛛池模板: 妻色成人网| 五月激情在线 | 永久看看免费大片 | 奶波霸巨乳一二三区乳 | 中文字幕在线免费视频 | 麻豆一区二区三区在线观看 | 欧美日韩一级二级 | 日本a大片 | 国产精品色悠悠 | 国产一区二区视频网站 | 91性视频| 顶级嫩模啪啪呻吟不断好爽 | 欧美黄色激情视频 | 在线观看色网站 | 日韩一区二区三区在线 | 日本视频久久 | 亚洲精品一区二区三区中文字幕 | 91免费国产视频 | 国产精品爽爽久久久久久 | 欧美 日本 国产 | 91精品国产麻豆国产自产在线 | 欧美狂猛xxxxx乱大交3 | 视频在线观看一区 | 四虎成人精品永久免费av九九 | 天天爽爽 | 午夜精品久久久久久久 | 日韩在线观看不卡 | 成人女同av免费观看 | 国产成人一区二区 | 天天操天天操天天 | 久久第一页| 日韩色爱 | 亚洲精品视频在线播放 | 99精品免费观看 | 久久久国产一区二区 | 噜噜噜噜色 | 99中文字幕在线观看 | 99福利视频| 精品欧美乱码久久久久久 | 色婷婷丁香 | 国产高潮流白浆 |