- /**********************************************************************************************
-- Title : [2k] SYSINDEXES.ROWS 업데이트를 통한 COUNT(*) 하기
-- Reference : dBRang.com
-- Key word : dbcc updateusage, sysindexes
**********************************************************************************************/
-- 일반적인 rows 출력
SELECT count(*) FROM my_main
GO
-- 시스템 테이블을 이용한 rows 출력
SELECT o.name, rows
FROM sysobjects o INNER JOIN sysindexes i
ON o.id = i.id
WHERE i.indid < 2
ORDER BY o.name
GO
SELECT object_name(id) ,rowcnt ,dpages * 8
FROM sysindexes
WHERE indid IN (1,0)
AND OBJECTPROPERTY(id, 'isUserTable') = 1
AND object_name(id)='my_main'
-- 위 전자와 후자의 결과가 틀린 경우
/*
ㅇ"DBCC UPDATEUSAGE ('디비명','테이블명','인덱스명') with count_rows"를 사용한다.
ㅇ이경우에는 sysindexes 의 rowcnt 를 현재 총 행수로 update를 해주어야 한다.
ㅇwith count_rows옵션은 sysindexes의 rows 열이 테이블이나 뷰의 현재 행 개수로 업데이트되도록
지정한다. 이것은 indid가 0 또는 1인 경우에만 적용한다.
ㅇ이 명령은 sysindexes에 writelock을 걸기에 서비스중이면서 큰 테이블의 경우 차라리 count(*)가
효율적일 수 있다.
*/
-- 예
DBCC UPDATEUSAGE ('ep','my_main','PK_my_main') with count_rows
GO
[2k] SYSINDEXES.ROWS 업데이트를 통한 COUNT(*) 하기
2008. 9. 7. 12:08