Clustered Index Clustered Index는 row의 물리적 정렬 순서를 설정하는 index입니다. PK를 설정하면 위와 같이 clustered Index가 없이 정렬되지 않은 테이블이 있습니다. 이 테이블은 내부적으로 아래와 같이 Data Page 단위로 저장됩니다. 이때 학생 번호 6에 해당하는 학생 데이터를 조회하려 합니다. 데이터가 정렬되어 있지 않기 때문에 어떤 Data Page에 6번 학생이 존재하는지 모릅니다. 따라서 모든 Data Page를 순서대로 조회합니다. 최악의 경우 마지막에 존재하는 데이터를 찾기 위해 모든 Data Page의 학생 데이터를 탐색하게 됩니다. 이를 테이블 스캔이라고 합니다. Clustered Index 생성 위의 그림에서 학생번호를 PK로 설정하면 자..
용어 정리 옵티마이저 옵티마이저는 통계 정보를 기반으로 여러 방법의 비용을 계산합니다. 그 중 가장 비용이 적은 최적의 처리 방식을 최종적으로 선택합니다. 실행 계획 옵티마이저가 쿼리를 어떻게 처리할 것인지 계산해낸 결과입니다. 쿼리 앞에 EXPLAIN, EXMPLAIN ANALYZE 을 붙이면 확인할 수 있습니다. explain select * from product_info order by sale_cnt desc; explain analyze select * from product_info order by sale_cnt desc; 실행 계획을 확인하는 이유 우리의 의도대로 MySQL이 동작하는지 점검한다. 성능 병목이 있는 부분을 해소한다.(인덱스, 쿼리, 시스템 변수 튜닝 등) Type 종류 c..
Mysql 쿼리 동작 순서 1. 쿼리 파서 동작 select id from team where team_name = '드림팀'; 처럼 sql 문을 실행하면 쿼리 파서가 각 단어를 토큰으로 분리한 뒤 문법적 오류를 체크합니다. 2. 파서 트리 구성 문법적 오류가 없을 경우 파서 트리 형태로 구성합니다. 3. 전처리기 동작 이 또한 오류를 체크합니다. team 이라는 테이블이 존재하는지, 사용자가 team 테이블에 접근이 가능한지를 파악합니다. 4. 옵티마이저 동작 옵티마이저는 최적화된 실행계획을 실행하는데 도움을 줍니다. 기본적으로 풀스캔을 하게 되지만 인덱싱을 주어 실행계획을 변경할 수 있습니다. Mysql 엔진의 목적 Mysql 엔진의 목적은 요청 쿼리에 대해서 어떻게 실행할지 결정하는 ..
에러 상황 Mac OS 환경에서 Mariadb 를 homebrew로 설치했습니다. 이후 spring 에서 작업 시 MySQL 커넥터를 사용해서 DB를 연동했습니다. 잘 사용하다가 파이썬을 설치한 이후로 해당 에러가 발생하고 JDBC DB 연동이 안됐습니다. MariaDB [(none)]> select @@version, @@version_comment; +----------------+-------------------+ | @@version | @@version_comment | +----------------+-------------------+ | 11.0.2-MariaDB | Homebrew | +----------------+-------------------+ java.sql.SQLExcept..