반응형
MSSQL 데이터베이스 내 인덱스 조각화 조회 쿼리입니다.
SYS.DM_DB_INDEX_PHYSICAL_STATS 테이블과 SYS.INDEXES, SYSINDEXES 테이블 inner join 하여 인덱스 조각화 데이터를 추출합니다.
조각화가 많이 진행된 인덱스 내림차순으로 정렬합니다.
'Database_Name' 에 데이터베이스명 적어주시면 됩니다.
SELECT
ROW_NUMBER() over (order by ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) desc) AS Rownum
,DB_NAME() AS DatabaseName
,OBJECT_NAME(S.OBJECT_ID) AS TableName
,I.NAME AS IndexName
,ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) AS Fragmentation
FROM SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID(),NULL,NULL,NULL,NULL) AS S
INNER JOIN SYS.INDEXES AS I
ON S.OBJECT_ID = I.OBJECT_ID AND S.INDEX_ID = I.INDEX_ID
INNER JOIN SYSINDEXES AS R
ON I.OBJECT_ID = R.ID AND I.INDEX_ID = R.INDID
WHERE S.DATABASE_ID = DB_ID('Database_Name') -- 현재 데이터베이스
AND I.NAME IS NOT NULL -- HEAP은 무시
AND OBJECTPROPERTY(S.OBJECT_ID, 'IsMsShipped') = 0 -- 시스템 개체 무시
AND I.NAME NOT LIKE 'PK%' -- PK 무시
AND ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) > 30 -- 조각화 퍼센티지 체크
AND R.rows > 10000 -- 테이블 행개수 체크
ORDER BY Fragmentation DESC
반응형
'SQL > MSSQL' 카테고리의 다른 글
[MSSQL] With 절 사용 방법 (0) | 2023.03.13 |
---|---|
[MSSQL] Create Temp Table / 임시 테이블 생성 쿼리 (0) | 2023.03.12 |
[MSSQL] SQL SERVER Table NOLOCK 쿼리 (0) | 2023.03.11 |
[MSSQL] Truncate Table / 테이블 데이터 전체 삭제 쿼리 (0) | 2023.03.10 |
[MSSQL] Delete Table 테이블 데이터 삭제 방법 및 예시 (0) | 2023.03.10 |
[MSSQL] Update Table / 테이블 업데이트 쿼리 (0) | 2023.03.10 |
[MSSQL] Create Table / 테이블 생성 쿼리 (0) | 2023.03.09 |
[MSSQL] 데이터베이스 테이블 모든 컬럼명 조회 쿼리 (0) | 2022.12.02 |