0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SQLserver】インデックス再構築手順

Posted at

インデックス再構築の必要性

データベースに大量のデータが削除、追加されると索引がバラバラ(=断片化)になる
インデックスの断片化が進むとインデックスの効率が低下し、クエリの実行速度に影響を及ぼすためインデックスの再構築もしくは再構成が必要になる

インデックス再構築手順

1. インデックスの断片化率を確認する

SELECT
    i.name AS インデックス名,
    ips.avg_fragmentation_in_percent as 断片化率,
	ips.page_count as ページ数
FROM
	sys.dm_db_index_physical_stats(DB_ID(), default, default, default, default) AS ips
	JOIN sys.indexes AS i 
		ON ips.object_id = i.object_id
		AND ips.index_id = i.index_id
WHERE
	OBJECT_NAME(ips.object_id) = 'テーブル名'
ORDER BY
	avg_page_space_used_in_percent DESC;

実行結果
{5384BD79-D332-44DB-BC8C-83F6585C34F6}.png
すべてのインデックスで断片化率が80%以上であり、パフォーマンスが低下している可能性がある

2. 断片化率に応じてインデックスの再構築・再構成を実施する

[断片化率が小さい(30%未満)場合]
インデックスの再構成を実施する
インデックスの再構成はインデックスをオンラインのまま並び替える処理であり、消費リソースや運用面の負担が少ない
ただし断片化率に比例して処理時間が増えるため断片化率が大きい場合は再構築が望ましい

ALTER INDEX [インデックス名] ON [テーブル名] REORGANIZE

[断片化率が大きい(30%以上)場合]
インデックスの再構築を実施する
インデックスを削除して作り直す処理であり、消費するリソースや運用面への負担が大きい
断片化率が大きい場合は再構成より有効であるとされている

ALTER INDEX [インデックス名] ON [テーブル名] REBUILD

実行結果
{26E16B7A-E24C-4489-BCBA-5BEC46370ADE}.png
断片化率が0%になっている

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?