메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

SQL SERVER (Microsoft SQL Server)

설치 방법

DB생성 및 접속

테이블/인덱스 생성

테이블/인덱스 사이즈 조회

통계정보 갱신

실행 계획

  • SSMS에서 쿼리 → 실제 실행 계획 포함 켜기. (Ctrl + M)
SET STATISTICS IO ON;
SET STATISTICS TIME ON;

SELECT *
FROM dbo.EMP
WHERE EMPNO = 1000;

- 실행하면 결과 창 외에 실행 계획(Execution Plan) 탭이 나타납니다.

SELECT
 └─ Hash Match
     ├─ Index Scan
     └─ Index Scan
  • Index Seek => oracle의 index range/unique scan
  • Actual Plan 에서 실제 row 확인하기
    • SQL Server에서도 Cardinality Estimation 문제가 있는지 보는 것이 중요.
Estimated Number of Rows = 10
Actual Number of Rows    = 1,500,000
  • SSMS 실행계획에서 우클릭하여: Save Execution Plan As... > .sqlplan파일로 저장
  • oracle DBMS_XPLAN 과 비슷
<ShowPlanXML ...>
    ...
</ShowPlanXML>

I/O를 더 자세하게 확인

SET NOCOUNT ON;

SET STATISTICS IO ON;
SET STATISTICS TIME ON;

SELECT O.ORDER_ID,
       O.CUSTOMER_ID,
       O.ORDER_DATE,
       O.AMOUNT
FROM dbo.ORDERS O
WHERE O.CUSTOMER_ID = 100
  AND O.ORDER_DATE >= '2026-01-01';

SET STATISTICS IO OFF;
SET STATISTICS TIME OFF;
Table 'ORDERS'.
Scan count 1,
logical reads 23500,
physical reads 0,
read-ahead reads 0
SQL Server Execution Times:
   CPU time = 850 ms,
   elapsed time = 920 ms.

SET STATISTICS IO에서 특히 중요한 항목

Table 'ORDERS'.

Scan count 1,
logical reads 125000,
physical reads 0,
read-ahead reads 120000,
lob logical reads 0,
lob physical reads 0,
lob read-ahead reads 0.
  • Scan count
    테이블/인덱스에 대한 Scan 횟수입니다.
  • Nested Loop와 같이 반복 접근이 발생하면 눈여겨봐야 합니다.
  • logical reads
    -메모리에 있는 데이터 페이지를 읽은 횟수입니다.
  • physical reads
    디스크에서 실제 페이지를 읽은 횟수입니다.
  • SQL Server는 데이터가 버퍼 캐시에 올라가 있을 경우:
    physical reads = 0 이어도 logical reads = 1000000 일 수 있습니다.

Oracle 과 비교표

Oracle 과 비교표
Oracle SQL Server
A-Rows Actual Rows
E-Rows Estimated Rows
Buffers logical reads
Physical Reads physical reads
Execution Time CPU / elapsed
TABLE ACCESS FULL Table Scan
INDEX RANGE SCAN Index Seek
INDEX FULL SCAN Index Scan
HASH JOIN Hash Match
NESTED LOOPS Nested Loops
SORT Sort

힌트 사용 방법