【发布时间】:2010-11-11 15:57:51
【问题描述】:
我有一个基于 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使用索引对结果进行排序?
【问题讨论】:
标签: optimization mysql indexing query-optimization