일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- matplot
- 장고
- c#
- oracle
- MX Component
- 윈도우10
- 파이썬
- vscode
- sql developer
- scrapy
- 오라클
- MSSQL PYTHON
- MSSQL
- 딥러닝
- rs485
- pymssql
- 텐서플로우
- windows10
- rs422
- Python
- tensorflow
- django
- PYTHON MSSQL
- MEAN Stack
- Visual Studio Code
- 크롤링
- Serial
- 티스토리 초대장
- M2M
- 자본주의
Archives
- Today
- Total
안까먹을라고 쓰는 블로그
[SQL Query] 실행계획 확인방법 본문
반응형
SQL구문의 지연이 발생했을 때 제일 먼저 실행 계획을 살펴봐야 합니다.
모든 DBMS는 실행 계획을 조사하는 수단을 제공합니다.
※ 실행계획이 만들어지면 DBMS는 그것을 바탕으로 데이터 접근을 수행합니다. 하지만 데이터양이 많은 테이블에 접근하거나 복잡한 SQL 구문을 실행하면 반응 지연이 발생하는 경우가 꽤 있습니다. 그 이유로는 통계정보가 부족한 경우도 있습니다만, 이미 최적의 경로(방법)가 설정되어 있는데도 느린 경우도 있습니다. 또한 통계 정보가 최신이라도 SQL구문이 너무 복잡하면 옵티마이저가 최적의 접근 경로(방법)를 선택하지 못할 수도 있습니다.
■ 실행계획 확인방법
■ MSSQL
SET SHOWPLAN_TEXT ON
■ ORACLE
set autotrace traceonly
■ 간단한 성능체크
■ MSSQL
SET STATISTICS IO ON
SET STATISTICS TIME ON
GO
-- 쿼리
select * from (
select SourceProdCode1 as ProdCode from vBlendProd
union
select SourceProdCode2 as ProdCode from vBlendProd) TSS
where TSS.ProdCode NOT IN (select ProdCode from vTank)
SET STATISTICS IO OFF
SET STATISTICS TIME OFF
■ 통계정보 갱신명령
■ MSSQL
UPDATE STATISTICS [테이블 이름]
■ ORACLE
exec DBMS_STATS.GATHER_TABLE_STATS([스키마 이름], [테이블 이름])
※ 통계정보
- 각 테이블의 레코드 수
- 각 테이블의 필드 수와 필드의 크기
- 필드의 카디널리티(값의 개수)
- 필드의 히스토그램(어떤 값이 얼마나 분포되어 있는가)
- 필드 내부에 있는 NULL수
- 인덱스 정보
위와 같은 통계정보를 활용하여 옵티마이저는 실행계획을 만든다.
반응형
'DataBase > MS SQL' 카테고리의 다른 글
[MSSQL] 컬럼의 데이터 번호붙여서 업데이트하기 (0) | 2022.02.08 |
---|---|
[SQL Query] CASE 식 (Feat. 조건분기) (0) | 2022.01.06 |
[SQL Query] CASE 문 (0) | 2021.12.30 |
[SQL Query] MetaData (메타데이터) (0) | 2021.12.30 |
[SQL Query] Window Function (원도우 함수) (0) | 2021.12.30 |
Comments