나는 3 개의 컬럼을 기반으로하는 복합 인덱스를 가지고 있는데, 두 개는 내 쿼리에 제약이 있고 세 번째 것은 order by 절이다. 아직 mysql은 인덱스를 정렬에 사용하지 않는다.정렬을 위해 인덱스를 사용하기 위해 mysql 쿼리를 최적화한다.
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 | +----+-------------+--------+------+--------------------------------+------+---------+------+---------+-----------------------------+
테이블 구조는 다음과 같습니다
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 |
내가 결과를 정렬 인덱스를 사용하는 MySQL을 강제로해야합니까?
FORCE INDEX가 문제를 해결했습니다. 쿼리가 훨씬 빠르게 실행되고 데이터베이스의 많은 부분과 일치하는 쿼리에 대해 올바르게 수행됩니다. –
좋은 물건, 다행. – zombat