Skip to content

[10주차] 업무에 바로 쓰는 SQL 튜닝_3장_이준렬 #86

@lee-JunR

Description

@lee-JunR

서적의 EXPLAIN으로 옵티마이저의 실행 계획을 조회하는 부분에서 예제 쿼리에 대한 결과가 달라 질문드립니다.!

EXPLAIN
SELECT 사원.사원번호, 직급.직급명
FROM 사원,
     직급
WHERE 사원.사원번호 = 직급.사원번호
  AND 사원.사원번호 BETWEEN 10001 AND 10100;

해당 쿼리의 결과가 책에서는 ref 로 나오나

image

이렇게 나와있으나 제 실행 결과에서는 eq_ref 로 나옵니다.

+----+-------------+--------+------------+--------+---------------+---------+---------+----------------------------+------+----------+--------------------------+
| id | select_type | table  | partitions | type   | possible_keys | key     | key_len | ref                        | rows | filtered | Extra                    |
+----+-------------+--------+------------+--------+---------------+---------+---------+----------------------------+------+----------+--------------------------+
|  1 | SIMPLE      | 직급   | NULL       | range  | PRIMARY       | PRIMARY | 4       | NULL                       |  151 |   100.00 | Using where; Using index |
|  1 | SIMPLE      | 사원   | NULL       | eq_ref | PRIMARY       | PRIMARY | 4       | tuning.직급.사원번호       |    1 |   100.00 | Using index              |
+----+-------------+--------+------------+--------+---------------+---------+---------+----------------------------+------+----------+--------------------------+
2 rows in set, 1 warning (0.00 sec)

그래서 각 테이블을 조회해보니 두 테이블 모두 사원, 직급 테이블의 사원번호가 기본키더군요 (직급 테이블에서는 사원번호가 복합 기본 키의 한 속성입니다..)
그렇다면 1대 다가 되야할텐데 왜 책과 달리 eq_ref 가 나왔을까요
각 테이블 정보도 함께 보여드립니다.

mysql> desc 사원;
+--------------+---------------+------+-----+---------+-------+
| Field        | Type          | Null | Key | Default | Extra |
+--------------+---------------+------+-----+---------+-------+
| 사원번호     | int           | NO   | PRI | NULL    |       |
| 생년월일     | date          | NO   |     | NULL    |       |
| 이름         | varchar(14)   | NO   |     | NULL    |       |
| 성           | varchar(16)   | NO   |     | NULL    |       |
| 성별         | enum('M','F') | NO   | MUL | NULL    |       |
| 입사일자     | date          | NO   | MUL | NULL    |       |
+--------------+---------------+------+-----+---------+-------+
6 rows in set (0.01 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    |       |
+--------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions