问答

mysql 联合索引失效的问题?

作者:admin 2021-07-12 我要评论

DROP TABLE IF EXISTS `users`;CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) NOT NULL DEFAULT '', `balance` int(11) NO...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
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

###

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • mysql 联合索引失效的问题?

    mysql 联合索引失效的问题?

  • Mac下使用electron-builder  打包

    Mac下使用electron-builder 打包

  • 让导出的axure组件主题色可变

    让导出的axure组件主题色可变

  • iview中CheckBox为选中状态,再次点击

    iview中CheckBox为选中状态,再次点击

腾讯云代理商
海外云服务器