失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 有关MySQL InnoDB在索引中自动添加主键的问题【MySQL】

有关MySQL InnoDB在索引中自动添加主键的问题【MySQL】

时间:2021-09-08 14:02:22

相关推荐

有关MySQL InnoDB在索引中自动添加主键的问题【MySQL】

数据库|mysql教程

用户

数据库-mysql教程

手机怎么搭建网站源码,vscode设置执行路径,ubuntu 16 目录,哪个公司在用tomcat,手机爬虫案件,iis php curl,包装seo优化怎么做,php网站源代码大量php文件,织梦会员中心最新文档模板下载lzw

有关MySQL InnoDB在索引中自动添加主键的问题

球球棒棒糖接口源码,vscode启动速度,ubuntu网站是什么,tomcat 无法响应,sqlite新建table,shopnc uc整合插件,前端开发是框架吗,网络爬虫 demo,php的配置文件是,c seo,简易个人网站源代码,java 网页绘图,手机html5电商模板下载,微信查看页面源代码,mvc仓库管理系统源码,二手车交易网站程序源码lzw

㈠ 原理:

播放器控件源码,ubuntu粘贴回车命令,爬虫菠菜公司数据,hahoop php,乐昌seo引流lzw

只要用户定义的索引字段中包含了主键中的字段、那么这个字段就不会再被InnoDB自动加到索引中

但如果用户的索引字段中没有完全包含主键字段、InnoDB 就会把剩下的主键字段加到索引末尾

㈡ 例子

例子一:

[sql]

CREATE TABLE t (

a char(32) not null primary key,

b char(32) not null,

KEY idx1 (a,b),

KEY idx2 (b,a)

) Engine=InnoDB;

idx1 和 idx2 两个索引内部大小完全一样、没有区别

例子二:

[sql]

CREATE TABLE t (

a char(32) not null,

b char(32) not null,

c char(32) not null,

d char(32) not null,

PRIMARY KEY (a,b)

KEY idx1 (c,a),

KEY idx2 (d,b)

) Engine=InnoDB;

这个表 InnoDB 会自动补全主键字典、idx1 实际上内部存储为 (c,a,b),idx2 实际上内部存储为 (d,b,a)

但是这个自动添加的字段、Server 层是不知道的、所以 MySQL 优化器并不知道这个字段的存在、那么如果你有一个查询:

[sql]

SELECT * FROM t WHERE d=x1 AND b=x2 ORDER BY a;

其实内部存储的 idx2(d,b,a) 可以让这个查询完全走索引、但是由于 Server 层不知道、

所以最终 MySQL优化器 可能选择 idx2(d,b) 做过滤然后排序 a 字段、或者直接用PK扫描避免排序

而如果我们定义表结构的时候就定义为 KEY idx2(d,b,a) 、那么 MySQL 就知道(d,b,a)三个字段索引中都有、

并且 InnoDB 发现用户定义的索引中包含了所有的主键字段、也不会再添加了、并没有增加存储空间

㈢ 建议

因此、由衷的建议、所有的 MySQL DBA 建索引的时候、都在业务要求的索引字段后面补上主键字段、

这没有任何损失、但是可能给你带来意外的惊喜哦

如果觉得《有关MySQL InnoDB在索引中自动添加主键的问题【MySQL】》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。