2012-11-28 23 views
6

Tôi có bảng sau:Tại sao truy vấn của tôi không sử dụng chỉ mục trên trường ngày giờ của tôi?

CREATE TABLE 'tableA'(
`col1` int(11) NOT NULL AUTO_INCREMENT, 
    `col2` varchar(20) NOT NULL, 
    `col3` int(11) NOT NULL, 
    `col4` varchar(200) NOT NULL, 
    `col5` varchar(15) NOT NULL, 
    `col6` datetime NOT NULL, 
    PRIMARY KEY (`col1`), 
    UNIQUE KEY `col2,col3` (`col2`,`col3`), 
    KEY `col6` (`col6`) 
) ENGINE=InnoDB AUTO_INCREMENT=1881208 DEFAULT CHARSET=utf8 

Tôi có một chỉ mục trên col6, một cột datetime. Tôi có gần 2 triệu hàng trong bảng và các ngày trong khoảng từ 1/1/2007 đến 27/11/2012.

Khi tôi chạy sau, nó không sử dụng chỉ số của tôi:

EXPLAIN SELECT * FROM tableA ORDER BY col6 ASC 


+----+-------------+----------+------+---------------+------+---------+------+---------+----------------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra   | 
+----+-------------+----------+------+---------------+------+---------+------+---------+----------------+ 
| 1 | SIMPLE  | tableA | ALL | NULL   | NULL | NULL | NULL | 1933765 | Using filesort | 
+----+-------------+----------+------+---------------+------+---------+------+---------+----------------+ 

tôi đã cố gắng chuyển đổi lĩnh vực datetime để một số nguyên và chuyển đổi datetime để một dấu thời gian unix. Tuy nhiên, nó vẫn không sử dụng chỉ mục của tôi. Tôi đang thiếu gì? Tại sao trình tối ưu hóa nhấn mạnh vào việc sắp xếp qua nhiều hàng (trong trường hợp này là 1,933,765 hàng) thay vì sử dụng chỉ mục?

+0

Xem xét phân vùng. – Kermit

+0

Có phải [bộ đệm sắp xếp] của bạn (http://dba.stackexchange.com/questions/15396/sort-buffers-and-tables-on-disk-mysql-innodb) đủ lớn không? Các chỉ mục của bạn sẽ không giúp truy vấn, nhưng bộ đệm sắp xếp lớn hơn có thể tăng tốc độ truy vấn một chút. –

+0

Nếu bạn thường sắp xếp theo cùng một cột, hãy xem xét chạy ['ALTER TABLE ... ORDER BY'] (http://dev.mysql.com/doc/refman/5.0/en/alter-table.html). Đồng thời xem [Tối ưu hóa ORDER BY'] (http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html). để biết thêm về tối ưu hóa filesort. Các tùy chọn ngoài việc tăng 'sort_buffer_size' bao gồm tăng' read_rnd_buffer_size', sử dụng ít RAM hơn cho mỗi hàng, hoặc trỏ 'tmpdir' vào một đĩa vật lý chuyên dụng. – user113215

Trả lời

3

Vì bạn không chọn bất kỳ thứ gì dựa trên chỉ mục để thu hẹp tập hợp kết quả, việc sử dụng nó sẽ chỉ phát sinh thêm công việc tra cứu thông qua tra cứu điểm mỗi hàng trong bảng chính.

Các vấn đề liên quan