3
나는 다음과 같은 테이블을 가지고 :MySQL의 인덱스는 사용하지 않습니다
desc log;
+-------------------+-------------------------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+-------------------------------+------+-----+-------------------+-------+
| time | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
| severity | enum('0','1','2','3','4','5') | NO | | 1 | |
| user_id | bigint(20) | YES | MUL | NULL | |
| user_ip | varchar(15) | YES | MUL | NULL | |
| module | varchar(30) | NO | | NULL | |
| message | text | NO | | NULL | |
| blog_id | bigint(20) | NO | MUL | NULL | |
| event_type | varchar(255) | YES | MUL | NULL | |
| post_id | bigint(20) | YES | | NULL | |
| data | longtext | YES | | NULL | |
| data_integer | tinyint(4) | YES | | NULL | |
| data_integer_type | varchar(100) | YES | | NULL | |
+-------------------+-------------------------------+------+-----+-------------------+-------+
테이블은 인덱스를 다음했습니다
show indexes from log;
+-------------+------------+----------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------------+------------+----------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| log | 1 | log_event_type_idx | 1 | event_type | A | 30 | NULL | NULL | YES | BTREE | |
| log | 1 | log_user_id_idx | 1 | user_id | A | 10938 | NULL | NULL | YES | BTREE | |
| log | 1 | log_blog_id_idx | 1 | blog_id | A | 24064 | NULL | NULL | | BTREE | |
| log | 1 | log_user_ip_idx | 1 | user_ip | A | 24064 | NULL | NULL | YES | BTREE | |
| log | 1 | log_time_idx | 1 | time | A | 240647 | NULL | NULL | | BTREE | |
+-------------+------------+----------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
I 8 월 또는 9월에 대한 데이터를 조회하고,이 인덱스를 사용하고 잘 작동합니다. 그러나 Oct 데이터의 경우 인덱스를 사용하지 않습니다. 표의 최대 날짜는 '2012-10-15'입니다. 설명 플랜을 추가했습니다.
explain
select *
from log
where time >= '2012-08-01 00:00:00' AND time < '2012-09-01 00:00:00'
+----+-------------+-------------+-------+----------------------+----------------------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+-------+----------------------+----------------------+---------+------+-------+-------------+
| 1 | SIMPLE | log | range | log_time_idx | log_time_idx | 4 | NULL | 57306 | Using where |
+----+-------------+-------------+-------+----------------------+----------------------+---------+------+-------+-------------+
1 row in set (0.04 sec)
explain
select *
from log
where time >= '2012-09-01 00:00:00' AND time < '2012-10-01 00:00:00'
+----+-------------+-------------+-------+----------------------+----------------------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+-------+----------------------+----------------------+---------+------+-------+-------------+
| 1 | SIMPLE | log | range | log_time_idx | log_time_idx | 4 | NULL | 42569 | Using where |
+----+-------------+-------------+-------+----------------------+----------------------+---------+------+-------+-------------+
explain
select *
from log
where time >= '2012-10-01 00:00:00' AND time < '2012-11-01 00:00:00'
+----+-------------+-------------+------+----------------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+------+----------------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | log | ALL | log_time_idx | NULL | NULL | NULL | 481300 | Using where |
+----+-------------+-------------+------+----------------------+------+---------+------+--------+-------------+
어떤 점이 좋을까요? 나는 MySQL 5.1.48을 사용하고있다.
그 사이에 어떤 가치가 있습니까? – jcho360
예. 나는 가지고있다. 299011 건이 될 수 있습니다. – AIR
인덱스 통계가 최신인지 확인하기 위해'OPTIMIZE TABLE' 또는'ANALYZE TABLE'을 시도 할 것입니다. 그것은 오랜 시간이 걸릴 수 있으므로 그렇게하기 전에 문서를 확인하십시오. (http://dev.mysql.com/doc/refman/5.0/en/optimize-table.html) – a1ex07