我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL索引的一道题目

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL索引的一道题目

MySQL索引的一道题目

## 创建表
CREATE TABLE `hecg` (  
	`a` int(11) NOT NULL,  
	`b` int(11) NOT NULL,  
	`c` int(11) NOT NULL,  
	`d` int(11) NOT NULL,  
	PRIMARY KEY (`a`,`b`),  
	KEY `c` (`c`),  
	KEY `ca` (`c`,`a`),  
	KEY `cb` (`c`,`b`) ) ENGINE=InnoDB;

## 查询语句
select * from hecg where c=N order by a limit 1;
select * from hecg where c=N order by b limit 1;

## 初始化数据
mysql> select * from hecg;
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
| 1 | 2 | 3 | 0 |
| 1 | 3 | 2 | 0 |
| 1 | 4 | 3 | 0 |
| 2 | 1 | 3 | 0 |
| 2 | 2 | 2 | 0 |
| 2 | 3 | 4 | 0 |
+---+---+---+---+

问题:主键包含了 a、b 这两个字段,在字段 c 上创建一个索引,就已经包含了三个字段了呀,为什么要创建ca和cb这两个索引?

  • 主键 a,b 的聚簇索引组织顺序相当于 order by a,b ,也就是先按 a 排序,再按 b 排序, c 无序

  • 索引 ca 的组织是先按 c 排序,再按 a 排序,同时记录主键

    +---+---+---+
    | c | a |主b|
    +---+---+---+
    | 2 | 1 | 3 |
    | 2 | 2 | 2 |
    | 3 | 1 | 2 |
    | 3 | 1 | 4 |
    | 3 | 2 | 1 |
    | 4 | 2 | 3 |
    +---+---+---+
    

    注意主键部分,这里不是 ab,而是只有 b。这个跟索引 c 的数据是一模一样的。

  • 索引 cb 的组织是先按 c 排序,在按 b 排序,同时记录主键

    +---+---+---+
    | c | b |主a|
    +---+---+---+
    | 2 | 2 | 2 |
    | 2 | 3 | 1 |
    | 3 | 1 | 2 |
    | 3 | 2 | 1 |
    | 3 | 4 | 1 |
    | 4 | 3 | 2 |
    +---+---+---+
    

得出修改结论:

ca 可以去掉,cb 需要保留

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL索引的一道题目

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL索引的一道题目

## 创建表CREATE TABLE `hecg` ( `a` int(11) NOT NULL, `b` int(11) NOT NULL, `c` int(11) NOT NULL, `d` int(11) NOT NULL, PRIMARY K
MySQL索引的一道题目
2019-11-23

总结三道MySQL联合索引面试题

目录前言:众所周知mysql联合索引遵循最左前缀匹配原则,在少数情况下也会不遵循(有兴趣,可以翻一下上篇文章)创建联合索引的时候,建议优先把区分度高的字段放在第一列。至于怎么统计区分度,可以按照下面这种方式。创建一张测试表,用来测试
2022-08-16

GBase8s中唯一索引与非唯一索引问题的示例分析

这篇文章主要为大家展示了“GBase8s中唯一索引与非唯一索引问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“GBase8s中唯一索引与非唯一索引问题的示例分析”这篇文章吧。唯一索引
2023-06-29

MySQL 普通索引和唯一索引的区别详解

1 概念区分普通索引和唯一索引普通索引可重复,唯一索引和主键一样不能重复。 唯一索引可作为数据的一个合法验证手段,例如学生表的身份证号码字段,我们人为规定该字段不得重复,那么就使用唯一索引。(一般设置学号字段为主键)主键和唯一索引主键保证数
2022-05-25

mysql中唯一索引的作用

mysql 唯一索引确保数据库表中的每一行都具有唯一的特定列值,从而:保证唯一性,防止重复值;提供快速查找,使用 b-tree 数据结构;维护数据完整性,减少冗余错误;优化空间利用率,避免重复值存储;提高查询性能,快速过滤符合唯一索引条件的
mysql中唯一索引的作用
2024-04-29

MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引是什么

今天小编给大家分享一下MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下
2023-04-21

MySQL索引的一些常见面试题大全(2022年)

目录为什么要建立索引?哪些情况适合建立索引?那么哪些情况下适合建索引?哪些情况下不适合建索引?为什么索引是使用B+树?(重点)索引分为那几类?什么是聚簇索引?(重点)使用聚簇索引的优缺点?(知道)为什么推荐使用自增主键作为索引?(知道)什么
2023-02-17

MYSQL联合唯一索引

https://blog.csdn.net/weistin/article/details/79698996
MYSQL联合唯一索引
2019-08-28

MySQL唯一索引和普通索引选哪个?

想象这样一个场景,在设计一张用户表时,每人的身份证号是唯一的,需要搜索。但由于身份证号字段较大,不好将其作为主键。在业务代码已经保证插入身份证唯一的情况下,可以选择建立唯一索引和普通索引,这时该如何选择呢?接下来,将从查询和更新的执行过程进
2022-05-28

编程热搜

目录