MySQL을 기준으로 스터디 합니다.
물리엔진 용어
MySQL 구성요소
- MySQL 엔진
- SQL문을 토대로 문법검사등을 수행하고, SQL을 최소 단위로 분리한다.
- 데이터를 빠르게 찾을 수 있는 경로를 탐색한다.(최적화 경로 탐색)
- 스토리지 엔진으로 부터 받은 데이터를 가공 및 연산(필터링 join 등) 한다.
- 스토리지 엔진(ex InnoDB)
- 요청받은 SQL문을 토대로 디스크나 메모리에서 필요한 데이터를 가져오고, MySQL 엔진으로 보내줌
- 스토리지 엔진에 따라 쓰기효과, 빠르게 읽는 효과 등 다를 수 있으므로 적절한 스토리지 엔진을 선택해야함.
이 책은 MySQL 8.0 버전의 InnoDB 엔진 기준으로 설명하고 있다.
- 파서(parsor) : 사용자가 요청한 SQL문을 쪼개 최소 단위로 분리하고 트리를 만든다.(문법 검사 까지 수행)
- 전처리기(preprocessor) : 생성된 트리를 토대로 SQL문에 구조적인 문제는 없는지 파악.(테이블, 열, 함수, 뷰 등 실제로 존재하는지 혹은 접근 권한은 있는지등을 확인)
- 옵티마이저(optimizer)
- 전달된 트리를 토대로 필요하지 않는 조건을 제거하고 연산을 단순화 한다.
- 테이블 접근 순서, 인덱스 사용 여부, 어떤 인덱스 사용할지, 정렬할때 인덱스를 사용할지 등 결정
- 모든 실행 계획이 최선이 아닐 수 있기 때문에, 개발자가 적절히 한지 확인해줘야 함.
- 엔진 실행기
- 옵티마이저 실행 계획을 참고하여, 스토리지 엔진에서 데이터를 가져온다.
- MySQL 엔진이 가져온 데이터를 필터링, 정렬, join 하기 때문에 가져오는 데이터의 양을 줄이는게 매우 중요
오브젝트 용어
- 테이블 : 데이터를 저장하는 오브젝트
- 로우(행), 컬럼(열)
- 기본키
- 특정 행을 대표하는 열(다른 행과 중복되지 않는 대표값)
- 여러 열을 조합해서 만들 수 있음
- 인덱스로 활용가능
- 외래키 : 외부 테이블을 참조하고, 외부 테이블 데이터 변경에 영향을 받는 오브젝트
- 인덱스 : 키 값으로 데이터베이스 위치를 식별하고 데이터 접근속도를 위해 생성되는 키 기준으로 정렬된 오브젝트
- 고유 인덱스(unique index)
- 정렬되는 인덱스 열의 데이터가 중복되지 않고 유일
- ALTER TABLE 학생 ADD UNIQUE INDEX 연락처_인덱스(연락처);
- 고유 인덱스는 기본키와 다르게 NULL 가능
- 비고유 인덱스(non-unique index)
- 중복 데이터가 저장될 수 있음
- 뷰 : 테이블로부터 일부 데이터만을 가지는 가상 테이블
- 보안성 : 일부 데이터만 공개하고, 노출에 민감한 데이터에 대해서 제약을 설정할 수 있다.
- 여러개의 테이블 병합(join)할 때는 성능을 고려한 최적화된 뷰를 생성함으로써 일관된 성능을 제공할 수 있다.
[학습 서적]
https://product.kyobobook.co.kr/detail/S000001810409
'스터디 > 업무에 바로 쓰이는 SQL 튜닝' 카테고리의 다른 글
[업무에 바로 쓰는 SQL 튜닝] 4-4 열을 결합하여 사용하는 나쁜 SQL문 (1) | 2024.09.30 |
---|---|
[업무에 바로 쓰는 SQL 튜닝] 4-3 형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문 (0) | 2024.09.27 |
[업무에 바로 쓰는 SQL 튜닝] 4-2 사용하지 않는 함수를 포함하는 나쁜 SQL문 (0) | 2024.09.27 |
[업무에 바로 쓰는 SQL 튜닝] 4-1 기본키를 변형하는 나쁜 SQL문 (1) | 2024.09.24 |
[업무에 바로쓰는 SQL 튜닝] 3장. 실행 계획 수행[작성중] (1) | 2024.09.13 |