key
칼럼에 표시되는 값이 PRIMARY인 경우에는 프라이머리 키를 사용한다는 의미이며, 그 이외의 값은 모두 테이블이나 인덱스를 생성할 때 부여했던 고유 이름이다.type
칼럼이 index_merge
가 아닌 경우type
칼럼이 index_merge
인 경우key
칼럼에 여러 개의 인덱스가 쉼표(,)로 구분되어 표시된다.MySQL 8.0 문서의 설명
The
key_len
column indicates the length of the key that MySQL decided to use. The value ofkey_len
enables you to determine how many parts of a multiple-part key MySQL actually uses. If thekey
column saysNULL
, thekey_len
column also saysNULL
.Due to the key storage format, the key length is one greater for a column that can be
NULL
than for aNOT NULL
column.
key_len
은 NOT NULL일 때 보다 1 더 크다.dept_no
는 CHAR(4)이다.
emp_no
는 INTEGER 타입(4바이트)이다.
to_date
는 DATE 타입(3바이트)이며 NULL이다.
## key_len = 4*4 = 16바이트
EXPLAIN
SELECT * FROM dept_emp WHERE dept_no='d005';
## key_len = 16 + 4 = 20바이트
EXPLAIN
SELECT * FROM dept_emp WHERE dept_no='d005' AND emp_no=10001;
## key_len = 3 + 1 = 4바이트
EXPLAIN
SELECT * FROM titles WHERE to_date <= '1985-10-10';
💡 utf8mb4 문자 집합의 공간
실제로 utf8mb4 문자 집합에서는 문자 하나가 차지하는 공간이 1~4바이트까지 가변적이다.
하지만 MySQL 서버가 utf8mb4 문자를 위해 메모리 공간을 할당해야 할 때는 문자와 관계없이 고정적으로 4바이트로 계산한다.