mysql 联合索引失效的问题?

发布于 2022-09-12 03:21:15 字数 1397 浏览 29 评论 0

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL DEFAULT '',
  `balance` int(11) NOT NULL DEFAULT '0',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `created_at` (`created_at`),
  KEY `idx_name_balance` (`name`,`balance`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

INSERT INTO `users` VALUES (1, '张三', 7031151, 5500, '2019-07-18 11:03:13', '2019-08-12 16:27:23');
INSERT INTO `users` VALUES (2, '李四', 7031151, 1000, '2019-07-18 11:03:24', '2019-07-18 11:08:52');
INSERT INTO `users` VALUES (3, 'ccc', 7031151, 4561, '2019-08-09 18:27:03', '2019-08-09 18:27:03');
INSERT INTO `users` VALUES (6, 'ccc', 7031151, 4561, '2019-08-12 15:19:01', '2019-08-12 15:19:01');
  1. 如下会用到联合索引的两个字段
EXPLAIN SELECT
    name,balance
FROM
    users 
WHERE
    `name` = "haha" 
and 
    balance=123

image.png

  1. 但是执行如下sql, 只用到了联合索引中的第一个字段, 第二个字段却没有用到, 这是咋回事儿
EXPLAIN SELECT
    name,balance
FROM
    users 
WHERE
    `name` = "haha" 
order by  
    balance desc

image.png

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

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

发布评论

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

评论(1

初心 2022-09-19 03:21:15

都是ref,key都是对应的索引,哪来的组合索引失效?

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