mysql索引的一个问题(跳过某一列,仍然可以使用索引)
CREATE TABLE `db0206`.`article`(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`author_id` INT(11) UNSIGNED NOT NULL,
`category_id` INT(11) UNSIGNED NOT NULL,
`views` INT(11) UNSIGNED NOT NULL,
`comments` INT(11) UNSIGNED NOT NULL,
`title` VARCHAR(255) NOT NULL,
`content` TEXT NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8;
CREATE INDEX idx_article_cv ON article(category_id,views);
explain结果
为什么会用到(category_id,views)这个联合索引呢? 中间的range是如何跳过的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
根据最左前缀匹配原则,联合索category_id,views,可组成如下:category_id,category_id、views两种情况,所以走索引
idx_article_cv 这是是组合索引 而且 category_id放在前面
你的sql语句有用到这个字段 所以自然可以走这条索引。
category_id根据左前缀匹配原则,走索引
从执行计划的
type
列是ref
,以及ref
列是const
,可以看出,索引idx_article_cv只用到了最左列来定位数据