Mysql 4.x 대까지는 없었는데, Mysql 5.x대부터 생긴 기능.

 

PK가 있는 테이블이 하나 있다.

 

CREATE TABLE  `revision` (
  `instance_id` int(11) NOT NULL,
  `xid` varchar(33) NOT NULL,
  `status` char(1) DEFAULT 'a',
  `last_revision` bigint(20) NOT NULL DEFAULT '0',
  `start_revision` bigint(20) NOT NULL DEFAULT '0',
  PRIMARY KEY (`instance_id`,`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

이 테이블에서 xid와 instance_id를 where절 해서 쿼리를 날렸더니, “Impossible WHERE noticed after reading const tables” 라고 뜬다. 분명 PK인데..

 

+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                                               |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
|  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Impossible WHERE noticed after reading const tables |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+

 

Mysql 5.x 대부터 query 데이터의 결과가 없으면 이렇게 나온다고 한다.

데이터가 있는 테이블에서 query 데이터의 결과가 나오면 아래와 같이 index가 타는 것을 확인할 수 있다.

 

 

explain SELECT status, last_revision, start_revision FROM revision where instance_id = '42' and xid = '1' ;
+----+-------------+-------------+-------+---------------+---------+---------+-------------+------+-------+
| id | select_type | table       | type  | possible_keys | key     | key_len | ref         | rows | Extra |
+----+-------------+-------------+-------+---------------+---------+---------+-------------+------+-------+
|  1 | SIMPLE      | revision | const | PRIMARY       | PRIMARY | 105     | const,const |    1 |       |
+----+-------------+-------------+-------+---------------+---------+---------+-------------+------+-------+
1 row in set (0.00 sec)

 

결론은. . mysql에서 expain 실행할 때 result data가 나오는 쿼리로 테스트해야 한다.

Posted by 김용환 '김용환'