我有一个基于 3 列的复合索引,其中两列在我的查询中受到限制,第三列是按子句排序,但 mysql 不使用索引进行排序。
解释 select * from videos where public_private='public' and approved='yes' order by number_of_views desc; +----+-------------+--------+------+-------------- ------------------+------+---------+------+------- --+------------------+ | 编号 | 选择类型 | 表| 类型 | 可能的键 | 关键 | key_len | 参考 | 行 | 额外 | +----+-------------+--------+------+-------------- ------------------+------+---------+------+------- --+------------------+ | 1 | 简单 | 视频 | 全部 | 已批准,已批准_3,已批准_2 | 空 | 空 | 空 | 1476818 | 使用哪里;使用文件排序 | +----+-------------+--------+------+-------------- ------------------+------+---------+------+------- --+------------------+
表结构如下:
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使用索引对结果进行排序?