주말이라 주중에 바빠서 못했던 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