key_len 관련
사용된 Index의 byte 수를 출력하는 key_len 속성의 값에 대한 설명이 이상한 것 같아 찾아보았습니다.
mysql> EXPLAIN
-> SELECT 사원번호
-> FROM 직급
-> WHERE 직급명 = 'Manager';
+----+-------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+--------------------------+
| 1 | SIMPLE | 직급 | NULL | index | PRIMARY | PRIMARY | 159 | NULL | 442486 | 10.00 | Using where; Using index |
+----+-------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+--------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> desc 직급;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 사원번호 | int | NO | PRI | NULL | |
| 직급명 | varchar(50) | NO | PRI | NULL | |
| 시작일자 | date | NO | PRI | NULL | |
| 종료일자 | date | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
이 테이블에서 저자분께서는 key_len 이 159 byte 인 이유가 아래와 같다고 했습니다.

하지만 여기서 직급명에 쓰인 varchar (50+1) * 3 = 153 에 사원번호와 시작일자를 더해도 159byte 가 되지 않습니다.
뭔가 이상해서 알아보니 key_len 에 바이트 수를 계산할 때에 가변 길이 문자열의 경우 추가적인 2byte 의 길이 정보가 필요하다고 합니다.
확인하기 위해 varchar(30) 인 속성 하나짜리 테이블을 만들었습니다.
mysql> desc temp;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| test | varchar(30) | NO | PRI | NULL | |
+-------+-------------+------+-----+---------+-------+
1 row in set (0.01 sec)
mysql> explain select * from temp where test = '1234';
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
| 1 | SIMPLE | temp | NULL | const | PRIMARY | PRIMARY | 92 | const | 1 | 100.00 | Using index |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
varchar(30) * 3(byte) + 2 = 92 byte 로 알맞은 값이 나온 걸 확인할 수 있었습니다.
해당 부분의 설명의 차이를 발견해 공유합니다~
더 딥한 설명 참고
https://blog.naver.com/sinjoker/223122911811
key_len 관련
사용된 Index의 byte 수를 출력하는 key_len 속성의 값에 대한 설명이 이상한 것 같아 찾아보았습니다.
이 테이블에서 저자분께서는 key_len 이 159 byte 인 이유가 아래와 같다고 했습니다.

하지만 여기서 직급명에 쓰인 varchar (50+1) * 3 = 153 에 사원번호와 시작일자를 더해도 159byte 가 되지 않습니다.
뭔가 이상해서 알아보니 key_len 에 바이트 수를 계산할 때에 가변 길이 문자열의 경우 추가적인 2byte 의 길이 정보가 필요하다고 합니다.
확인하기 위해 varchar(30) 인 속성 하나짜리 테이블을 만들었습니다.
varchar(30) * 3(byte) + 2 = 92 byte 로 알맞은 값이 나온 걸 확인할 수 있었습니다.
해당 부분의 설명의 차이를 발견해 공유합니다~
더 딥한 설명 참고
https://blog.naver.com/sinjoker/223122911811