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가 나오는 쿼리로 테스트해야 한다.
'DB' 카테고리의 다른 글
[mysql] Tip - group_concat, if/ifnull/case (0) | 2013.12.19 |
---|---|
Mysql HA (0) | 2013.04.23 |
[Mysql] driver버전별 lServer 버전 권장 (0) | 2012.04.27 |
cubrid client 에러 'has been interrupted' CUBRIDException 발생 (0) | 2011.11.28 |
[mysql] 테스트용 사용자 계정 추가 (0) | 2011.10.24 |