본문 바로가기

SQL

(11)
실행계획 ID 컬럼과 select_type 실행 계획 - EXPLAIN EXTENDED나 EXPLAIN PARTITIONS 명령은 더 상세하게 실행 계획을 확인 할 수 있음- 위쪽에 출력된 결과일수록 (id 컬럼의 갑이 작을수록) 쿼리의 바깥(outer) 부분이거나 먼저 접근한 테이블 아래쪽에 출력된 결과일수록 (d 컬럼의 값이 클수록) 쿼리의 안쪽(Inner) 부분 또는 나중에 접근한 테이블 id 컬럼 - 단위 SELECT 쿼리별로 부여되는 식별자 값 - SELECT 문장 안에서 여러 개의 테이블을 조인하면 조인되는 테이블의 개수만큼 실행 계획이 출력되지만 같은 아이디가 부여됨 - SELECT 문장은 하나인데 여러 겨의 테이블이 조인되는 경우 id값은 증가 하지 않음 select_type - 각 단위 SELECT쿼리가 어떤 타입의 쿼리인지 표시..
실행계획 key_len- 쿼리를 처리하기 위해 다중 컬럼으로 구성된 인덱스에서 몇개의 칼럼까지 사용했는지 알려줌, - 인덱스의 각 레코드에서 몇 바이트 까지 사용했는지 알려줌 - dep_no 칼럼의 타입이 char(4) 이기 때문에 프라이머리 키에서 앞쪽 12바이트만 유요하게 사용 - dep_no 칼럼은 utf-8문자 집합 사용 실제 utf8 문자는 1~3까지 가변적이긴 하지만 공간을 할당할때는 문자에 관계없이 고정적으로 3바이트로 계산 ref - 접근 방법이 ref 방식으면 참조 조건(equal 비교조건) 으로 어떤 값이 제공되어/ㅆ는지 보여줌 - 만약 상수값을 지정했다면 ref 칼ㄹ머의 값은 constfh 표시되고 다른 테이블의 칼럼값이면 그 테이블 명과 컬럼 명이 표시 됨 - 가끔 func라고 표시될 때가 ..
mysql 정렬 mysql 주요 처리 방식 풀 테이블 스캔 옵티마이저가 풀 테이블 스캔을 선택하는 경우1. 테이블 레코드가 너무 작아서 인덱스를 통해 읽는 것보다 풀스캔을 하는게 더 낫다고 생각하는 경우2. where 절이나 on절에 인덱스를 이용할 수 있는 적절한 조건이 없는 경우3. 인덱스 레인지 스캔을 사용할 수 있는 쿼리여도 일치 레코드 건수가 너무 많은 경우4. max_seeks_for_key 변수를 특정 값(n)으로 설정하면 옵티마이저는 인덱스 기수성(cardinality)나 선택도(selectivity) 무시 하고 최대 n건만 읽으면 된다고 판단 이 값을 작게 설정할수록 mysql서버가 인덱스를 더 사용하다록 유도 - 대부분의 dbms는 풀 스캔을 실행할 때 한번에 여러개의 블록이나 페이지를 읽어오는 기능이..