MySQL

    [RealMySQL] 기본적인 문법

    MySQL에서는 두 종류의 SQL문이 있습니다. 먼저 DB(스키마)나, 테이블의 구조를 변경하기 위한 문장인 DDL(Data Definition Language)과, 테이블의 데이터를 조작(읽고, 쓰기)하기 위한 문장을 DML(Data Manipulation Language)이 있습니다. DML DML에는 우리가 자주 얘기하는 크게 CRUD와 그 외로 나뉘게 됩니다. 대분류 기능 쿼리 CRUD 생성, 저장(CREATE) INSERT 조회(READ) SELECT 변경(UPDATE) UPDATE 삭제(DELECT) DELETE 비표준 SQL DBMS마다 다름 비표준 SQL에 관해서는 각 DMBS의 Reference를 참고하시면 됩니다. MySQL 기본설정 및 문법 (MySQL 기본설정에 관한 포스트는 다음을..

    Server SQL Modes

    The MySQL server can operate in different SQL modes, and can apply these modes differently for different clients, depending on the value of the sql_mode system variable. DBAs can set the global SQL mode to match site server operating requirements, and each application can set its session SQL mode to its own requirements. Modes affect the SQL syntax MySQL supports and the data validation checks i..

    통계정보(2) - Type편

    이어서 계속합시다. type MySQL 서버가 각 테이블의 레코드를 어떤 방식으로 읽었는지를 나타냅니다. 대표적인 방식으로는 인덱스를 사용해서 레코드를 읽는 방법과, 테이블 처음부터 끝까지 읽는 Full Table Scan 방식이 있습니다. 쿼리를 튜닝할 때 필수적으로 체크해야 하는 정보입니다. 대분류 소분류 설명 인덱스를 사용해 스캔 system 단 하나의 레코드를 가지는 테이블을 참조하는 형태의 접근 방법 const 쿼리가 PK나 UK를 이용하는 WHERE 조건절을 가지고 있으며, 반드시 1건을 반환 eq_ref 조인에서 첫 번째 읽은 테이블의 컬럼값을 이용해 두 번째 테이블을 PK나 UK로 동등조건 검색 (두번째 테이블은 반드시 1건의 레코드만 반환) ref 조인의 순서나 인덱스 종류에 상관없이 동..

    통계정보(1)

    1) 최신화(ANALYZE) MySQL의 버전업이 되며, 동적으로 통계정보들을 업데이트 하나 레코드의 수가 많지 않으면 정보 최신화를 자주 하지 않습니다. 그렇기 때문에, 개발용 MySQL 서버는 레코드 건수가 얼마 되지 않기 때문에, 통계 정보가 상당히 부정확한 경우가 많습니다. 이를 방지하기 위해서, 통계정보를 강제적으로 업데이트를 해 주어야 하는데 이를 'ANALYZE' 명령을 통해 수행합니다. 참고로 이 명령은 인덱스 키값의 분포도만 업데이트하고, 전체 테이블의 건수는 테이블의 전체 페이지 수를 이용해 예측합니다. 이 작업에서 InnoDB와 MyISAM의 차이가 나오는데, InnoDB는 'innodb_stats_sample_pages' 파라미터를 통해 소수의 표본을 추출해서 (8개~24개) 분석 ..

    옵티마이저(Optimizer)

    모든 일에는 계획을 세우기 마련입니다. 어떻게 행동하느냐에 따라 들이는 힘이나 시간도, 도출되는 결과도 제각각이기 때문이죠. DB에서도 마찬가지입니다! 개발자가 단순히 SQL을 작성하고 실행하면 일반적인 실행파일처럼 즉시 실행되는 것이 아니라 "이 쿼리문을 어떻게 하면 효율적으로 실행을 시킬까?"라 계산하며 여러 가지 실행계획을 세우게 됩니다. 이렇게 여러 실행계획을 세운 뒤 시스템 통계정보를 활용하여 각 실행계획의 예상 비용을 산정한 후 각 실행계획을 비교해서 최고의 효율을 가지고 있는 실행계획에 따라 쿼리를 수행하게 됩니다! 이러한 과정은 DBMS의 두뇌라 불리는 옵티마이저에서 실행됩니다. 옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진입니다. ..