안녕하세요. index관련해서 테스트를 하던중에 궁금한점이 있어서 질문드립니다.
현재 사용하는 Mysql 버전은 5.1.41-3 을 사용하고 있고요.\
상황 : index가 걸려있는 컬럼을 select 할 경우 index를 타는데, index가 걸려있는 않은 컬럼도 select 를 할 경우 index를 타지 않습니다.(테이블은 MyISAM 입니다.)
ex) time컬럼이 index인 경우,
select time from TB_TEST where time between 1329814800 and 1329832800;
=> ( index 사용 )
select time, count from TB_TEST where time between 1329814800 and 1329832800;
=> ( index 사용안됨 )
mysql> explain select time from TB_TEST where time between 1329829200 and 1329832800;
+----+-------------+-------------------------------+-------+---------------+------------+---------+------+-------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------------------------+-------+---------------+------------+---------+------+-------+--------------------------+
| 1 | SIMPLE | TB_TEST | range | index_time | index_time | 4 | NULL | 47782 | Using where; Using index |
+----+-------------+-------------------------------+-------+---------------+------------+---------+------+-------+--------------------------+
1 row in set (0.00 sec)
mysql> explain select time, idx from TB_TEST where time between 1329829200 and 1329832800;
+----+-------------+-------------------------------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------------------------+------+---------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | TB_TEST | ALL | index_time | NULL | NULL | NULL | 103442 | Using where |
+----+-------------+-------------------------------+------+---------------+------+---------+------+--------+-------------+
1 row in set (0.00 sec)
왜 select에서 구해오는 값에 index가 걸려있는 컬럼만 있을경우 index를 타는데, index가 걸려있지 않은 컬럼까지 포함하면 index를 타지 않는 걸까요.... between 때문인건가요?ㅠㅠ; |