1. /**********************************************************************************************
    -- 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

+ Recent posts