업무에 바로 쓰는 SQL 튜닝 [2장_2.1]

호밀빵 굽는 쿼카·2022년 11월 19일
0

2.1 장

물리엔진과 오브젝트 용어

1) DB 엔진 용어
2) SQL 프로세스 용어
3) DB 오브젝트 용어


DB 엔진 용어

MySQL 수행 프로세스

사용자 > SQL 문 실행(데이터 요청) > (MySQL 엔진 : parser) 문법에러 있는지/DB에 존재하는 테이블 대상으로 SQL문 작성했는지 등 다양한 문법 및 구문으로 검사 > (MySQL 엔진 : optimizer) 사용자가 요청한 데이터를 빠르고 효율적으로 찾아가는 계획 수립 > (스토리지 엔진 ) 해당 계획 토대로 스토리지 엔진에 위치한 데이터까지 찾아감 > 해당 데이터를 MySQL 엔진으로 전달 > (MySQL 엔진) 전달된 데이터에서 불필요한 부분 필터링 > 사용자에게 최종 결과 알려줌

스토리지 엔진

  • SQL문 토대로 DB에 저장된 디스크나 메모리에서 필요한 데이터 가져와서 MySQL 엔진으로 보내줌
  • INNODB 엔진 사용 이유 : OLTP(온라인상 트랜잭션 발생으로 데이터 처리) 환경 대다수이기 때문
  • MyISAM 엔진 : 대량의 쓰기 트랜잭션
  • Memory 엔진 : 메모리 데이터 로드해 빠르게 읽는 효과

MySQL 엔진

  • 사용자가 전달한 SQL 문 문법검사/적절한 오브젝트 활용검사
  • SQL문 최소 단위로 분리해 원하는 데이터 빠르게 찾는 경로 모색
  • (스토리지엔진에서 데이터 전달받음)
  • 전달받은 데이터에서 불필요한 데이터 제거/가공/연산



SQL 프로세스 용어

  • 파서 : SQL문 쪼개서 최소단위로 분리하고 트리로 만듦. 트리 만들면서 문법 검사
  • 전처리기 : SQL문 구조적 문제 파악
  • 옵티마이저 : 필요하지 않은 조건 제거/연산과정 단순화/어떤 순서로 테이블 접근할지/인덱스 사용할지/어떤 인덱스 사용할지/정렬할때 인덱스 사용할지 임시 테이블 사용할지
  • 엔진실행기 : 실행 계획 참고해서 스토리지 엔진에서 데이터 가져옴 / 가져온 데이터 필터링
    (따라서, MySQL 엔진 부하를 줄이려면 스토리지 엔진에서 가져오는 데이터양을 줄이는게 중요)



DB 오브젝트 용어

  • 테이블
  • 로우
    로우 수가 많아지면 데이터 접근하는 과정에서 시간 오래 소요 가능 > 파티셔닝 사용하면 성능 향상
  • 컬럼
  • 기본키
    중복되지 않는 값 / 2개 로우를 조합해 기본키 만들 수 있음 / 인덱스 역할도 수행
    기본키 = 클러스터형 인덱스
    기본키와 동일한 인덱스 = 불필요한 공간 낭비 + 정렬의 오버헤드 발생 -> 삭제해야함!!
  • 인덱스
    키값으로 데이터 위치 식별/데이터 접근 속도 높임/효과적인 조회

  • 제한된 정보 제공 가능 -> 보안성
    학생_뷰 데이터 변경 <-> 학생 데이터 변경 영향 있음
CREATE VIEW 학생_뷰 AS 
SELECT 학번,이름 FROM 학생;

인덱스 종류

1) 기본키 인덱스 (=primary key)

  • 데이터 유일성 보장
  • NULL 값 미허용

2) 고유 인덱스 (=unique key)

  • 데이터 유일성 보장
  • NULL 값 허용
  • 예제) 중복이 없는 열을 고유 인덱스로 생성 = 이미 중복이 없는데 불필요한 중복 검증 과정
ALTER TABLE 학생
ADD UNIQUE INDEX 연락처_인덱스(연락처);

3) 비고유 인덱스

  • 데이터 유일성 미보장
  • 중복 발생 가능
  • 일반적인 인덱스
ALTER TABLE 학생
ADD INDEX 이름_인덱스(이름);

clustered vs non-clustered 는 인덱스 구조




profile
열심히 굽고 있어요🍞

0개의 댓글