본문 바로가기

SQL/Mysql

업무에 바로쓰는 SQL튜닝_정리

728x90
반응형

1. 조인알고리즘용어

  • 중첩루프조인(NL조인) 드라이빙 테이블 데이터 1건당 드리븐 테이블 반복검색 - 최종 양쪽 데이터 출력
  • 블록 중첩 루프 종인(BNL) 조인버퍼 찰때까지 적재한후 드리븐 테이블을 접근 
  • 배치키 엑세스조인 조인버퍼 + 랜덤버퍼 -> 드리븐 테이블 접근 
  • 해시조인 각 테이블의 데이터를 내부적 해시값을 만들어 조인 수행 결과는 조인버퍼에 저장되어 조인열의 인덱스 요구  X

 

2. 기본 튜닝용어

  • 오브젝트 스캔 :
    • 오브젝트 - 테이블 스캔 - 인덱스 스캔 
    • TABLE FULL SCAN
    • INDEX RANGE SCAN
    • INDEX FULL SCAN
    • INDEX UNIQUE SCAN - 기본키나 고유인덱스로 테이블 접근하는 방식 (가장 효율적)
    • INDEX LOOSE SCAN - 인덱스의 필요한 부분만 골라서 스캔하는 방식
  • 디스크 접근방식
    • 시퀀셜엑세스 : 순차접근
    • 랜덤엑세스: 물리적 위치 고려 X
  • 조건
    • 액세스 유형 WHERE
    • 필터 유형 AND
  • 카디널리티 = 전체건수 * 선택도 (주민등록번호는 카디널리티 높고, 성별은 카디널리티가 낮다)
  • 힌트: 힌트를 무조건 참고하지는 않는다. 
SELECT STRAIGHT_JOIN /*힌트는 SELECT절 뒤에 바로*/
매핑.사원번호,
부서.부서번호
FROM 부서사원_매핑 매핑,
     부서;
  • COLLATION 
  • 통계정보
  • 히스토그램: 분포정보 

 

3. 실행계획 수행

EXPLAIN ###;
DESCRIBE ###;
DESC ###;

-- ####는 SQL구문

 

4. 프로파일링 

SHOW VARIABLES LIKE 'PROFILING%'; --프로파일링

SET PROFILING= 'ON'; --프로파일링 활성화 상태

SHOW PROFILES; --앞서 실행한 구문의 프로파일링 실행

SHOW PROFILING ALL FOR QUERY 1; --모든 프로파일링 쿼리 출력

SHOW PROFILE BLOCK IO FOR QUERY 1; -- 데이터 접근단위인 블록수준의 입출력 정보 추가

 

5. 인텍스에 키 추가

ALTER TABLE 사원 ADD INDEX I_이름(이름);
SHOW INDEX FROM 사원; --테이블의 인덱스 보여주기

6. UPDATE

UPDATE 사원출입기록 SET 출입문 = 'X' WHERE 출입문 = 'B';

 

7.AUTO COMMIT

SELECT @@AUTOCOMMIT;
--AUTO COMMIT의 세션기준 시스템변수 확인 가능 확인이후
SE AUTOCOMMIT=0; --으로 자동커밋되지 않게 해야함

 

8. 컬럼삭제

ALTER TABLE 사원 DROP COLUMN 컬럼명; --사원 테이블의 컬럼삭제

 

9. 파티션 추가

ALTER TABLE 급여
PARTITION BY RANGE COLUMNS (시작일자) --급여테이블의 시작일자 컬럼 기준 파티셔닝
(
	PARTITION P85 VALUES LESS THAN ('1985-12-31'),
    PARTITION P85 VALUES LESS THAN ('1986-12-31'),
    PARTITION P85 VALUES LESS THAN ('1987-12-31'),
    PARTITION P85 VALUES LESS THAN ('1988-12-31')
);

 

 

###.

예제쿼리도 심플하고 기본적으로 5줄이상 안넘어감.

초심자가 튜닝 맛배기용으로 몸풀때 참고하기 좋은 책인듯하다. 기본서로는 비추

728x90