Tôi có một chỉ mục tổng hợp dựa trên 3 cột, hai trong số đó bị ràng buộc trong truy vấn của tôi và thứ 3 là theo thứ tự theo mệnh đề nào đó mysql không sử dụng chỉ mục để sắp xếp.Tối ưu hóa truy vấn mysql của tôi để sử dụng chỉ mục để phân loại
explain select * from videos where public_private='public' and approved='yes' order by number_of_views desc; +----+-------------+--------+------+--------------------------------+------+---------+------+---------+-----------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+------+--------------------------------+------+---------+------+---------+-----------------------------+ | 1 | SIMPLE | videos | ALL | approved,approved_3,approved_2 | NULL | NULL | NULL | 1476818 | Using where; Using filesort | +----+-------------+--------+------+--------------------------------+------+---------+------+---------+-----------------------------+
Cấu trúc bảng như sau:
CREATE TABLE `videos` (
`indexer` int(9) NOT NULL auto_increment,
`user_id` int(9) default NULL,
`public_private` varchar(24) default NULL,
`approved` varchar(24) default NULL,
`number_of_views` int(9) default NULL,
PRIMARY KEY (`indexer`),
KEY `approved` (`approved`,`user_id`),
KEY `approved_3` (`approved`,`public_private`,`indexer`),
KEY `approved_2` (`approved`,`public_private`,`number_of_views`),
) ENGINE=MyISAM AUTO_INCREMENT=1969091 DEFAULT CHARSET=utf8 |
Những gì tôi nên làm gì để buộc mysql sử dụng chỉ số để phân loại kết quả?
FORCE INDEX giải quyết được sự cố. Truy vấn thực thi nhanh hơn nhiều và bạn đã đúng về truy vấn khớp với một phần lớn cơ sở dữ liệu. –
Công cụ tốt, vui vì nó hoạt động. – zombat