mysql索引的一个问题(跳过某一列,仍然可以使用索引)

发布于 2022-09-11 21:24:28 字数 619 浏览 18 评论 0

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结果

clipboard.png

为什么会用到(category_id,views)这个联合索引呢? 中间的range是如何跳过的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

指尖上得阳光 2022-09-18 21:24:28

根据最左前缀匹配原则,联合索category_id,views,可组成如下:category_id,category_id、views两种情况,所以走索引

起风了 2022-09-18 21:24:28

idx_article_cv 这是是组合索引 而且 category_id放在前面
你的sql语句有用到这个字段 所以自然可以走这条索引。

疯了 2022-09-18 21:24:28

category_id根据左前缀匹配原则,走索引

虐人心 2022-09-18 21:24:28

从执行计划的type列是ref,以及ref列是const,可以看出,索引idx_article_cv只用到了最左列来定位数据

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文