주말이라 주중에 바빠서 못했던 SQL 튜닝 공부 계속 ㄱㄱㄱ

출처 : @tastestar
사용자가 요청한 SQL문을 기반으로 디스크나 메모리에 저장된 데이터를 검색해 DBMS엔진에 전달
SQL문을 토대로 디스크나 메모리에서 필요한 데이터를 가져오는 역할
MySQL은 플러그형 아키텍처라서 애플리케이션 코드의 변경없이 스토리지 엔진을 교체할 수 있다. 다라서 특정 애플리케이션 요구에 맞게 스토리지 엔진을 선택할 수 있다.
읽기 작업이 많은 환경에서 높은 성능을 발휘한다.DB의 논리적 처리를 담당해 DBMS의 두뇌 역할을 함
SQL 문을 사용자에게서 넘겨받은 뒤 SQL 문법 검사, 적절한 오브젝트 활용 검사, SQL문을 최소단위로 분리해 원하는 데이터를 빠르게 찾는 경로 모색을 한다.
그리고 스토리지 엔진으로부터 받은 데이터 대상으로 불필요한 데이터를 제거하거나 가공 및 연산을 수행한다.
시작과 마무리는 MySQL 엔진이, 중간 핵심 역할은 스토리지 엔진이 담당한다.

SQL 쿼리를 분석해 MySQL이 이해할 수 있는 최소 단위인 토큰으로 분리하고, 해당 구성요소를 트리로 만든다.
전처리기. 생성된 트리를 토대로 구조적 유효성을 검증한다.
쿼리 실행 계획을 최적화하여 효율적인 데이터 검색 방법을 결정한다.
실행 계획을 작성해 전달한다.수립된 실행 계획으로 스토리지 엔진을 호출해 필요한 데이터를 가져온다.
DB 내에서 데이터를 저장, 관리, 조작하기 위해 사용되는 논리적 저장 구조
| 오브젝트 | 설명 |
|---|---|
| 테이블(Table) | 데이터를 저장하는 가장 기본적인 객체. 행(Row)과 열(Column)로 구성 |
| 뷰(View) | 하나 이상의 테이블을 연결하여 마치 테이블처럼 사용할 수 있는 가상의 객체. 실제 데이터는 저장되지 않음 |
| 인덱스(Index) | 테이블의 검색 속도를 높이기 위한 객체. 특정 열에 대해 빠른 검색을 지원 |
| 시퀀스(Sequence) | 일련번호를 자동으로 생성해주는 객체. 주로 기본 키나 고유 식별자 생성에 사용 |
| 시노님(Synonym) | 다른 데이터베이스 객체에 대한 별칭을 부여하는 객체 |
| 함수(Function) | 특정 연산을 수행하고 값을 반환하는 객체 |
| 프로시저(Procedure) | 함수와 유사하지만 값을 반환하지 않고 복잡한 작업을 수행하는 객체 |
| 패키지(Package) | 관련 있는 함수와 프로시저를 하나로 묶어 관리하는 객체 |
고유 인덱스(Unique Index)
중복값을 허용하지 않는 인덱스로 데이터 무결성을 유지하고 각 행의 값이 고유하도록 보장한다.
기본키와 유사하지만, 하나의 NULL이 허용되는 차이가 있다.(여러 NULL은 허용 X)
비고유 인덱스
중복값을 허용하는 인덱스. 대부분의 인덱스가 여기 속한다.
Clustered Index