Mysql-索引排序行的详解
技术百科
黄舟
发布时间:2017-03-02
浏览: 次 上一篇刚刚简洁化的介绍了B-TREE的几个结构与存储方式,但索引和数据的关系感觉上还是没有关联起来,
那么本篇,就通过实际的一个数据行的例子,创建索引后,他们在B+TREE上的排序是什么顺序。
一.模拟创建原始数据
下图中,左边是自己方便说明,模拟的数据。引擎为mysiam~
右边是用EXCEL把它们随机排列后的一个正常*数据表,把主键按照1-27再排列(不随机的话我在模拟数据时本来就是按顺序写的,再加索引看不大出这个索引排序的过程)
也就是说右边的数据,使我们要测试的原始数据,没建索引前是这样排序的,后边所有的数据都是以这个为依准进行的,这样更好看索引生成后的排序效果。
该表有4个字段(id,a,b,c),共27行数据
二.创建索引 a
如下图,当创建索引a以后,在该索引结构中,从原来的按照主键ID排序,变成了新的规则,我们说索引其实就是一个数据结构。则建立索引a,就是新另建立一个结构,排序按照字段a规则排序,第一条为主键ID为1代表的数据行,第二条ID=3的数据行,第三条ID=5代表的数据行。。。
新排序主键ID(以ID代表他们这行的数据):1 3 5 6 9 16 18 23 26 2 10 11 12 13 14 15 20 25 4 7 8 17 19 21 22 24 27
不难发现,当字段a相同时,他们的排列 前后主键ID来排,比如同样是a=1.1的值,但是他们的排序是ID值为1,3,5,6。。对应的行,和主键ID排序顺序相近。(即相同值时的排序,ID小的在前边)
三.创建索引 (a,b)
如下图,当创建联合索引(a,b)以后,在该索引结构中,从原来的按照主键ID排序,变成了新的规则,排序规则先按照字段a排序,在a的基础上在按照字段b排序。即在索引a的基础上,对字段b也进行了排序。
新排序主键ID(以ID代表他们这行的数据):6 18 23 10 15 20 7 22 27 1 3 26 2 11 25 4 8 24 5 9 16 12 13 14 17 19 21
不难发现,当字段a,b值都相同时,他们的排列前后,也是由主键ID决定的,比如同样是a=1.1,b=2.1的行(18,6,23),但是他们的排序是6,18,23。
字段(a,b)索引,先按a索引排序,然后在a的基础上,按照b排序
6 18 23 10 15 20 7 22 27 1 3 26 2 11 25 4 8 24 5 9 16 1
2 13 14 17 19 21
四.创建索引 (a,b,c)
字段(a,b,c)索引,先按a,b索引排序,然后在(a,b)的基础上,按照c排序
新排序主键ID(以ID代表他们这行的数据):23 6 18 15 20 10 27 22 7 1 26 3 11 2 25 24 4 8 5 16 9 12 14 13 17 19 21
五.结论:
和上一篇Mysql-索引-BTree类型【精简】讲的一样,B-TREE树的最后一排叶子节点,从左往右排,就是按照这个顺序的,不同索引不同顺序。有了顺序,那么查找是不就方便快速的很多了嘛
我们知道,读取数据的一个过程(相当于找房间的过程),如果有索引(房间登记表),先读取索引的数据结构(因为它数据小读取快嘛),在其结构的叶子节点,找到真实物理磁盘的存放位置(相当于找到门牌号码了),然后拿着门牌号码去磁盘里直接拿数据,这就是一个读取数据的过程。如果没索引那你就相当于不知道目的地,挨个房间找吧。
当没有索引时,其实主键ID就是他们的索引,按照主键ID从小到大的规则排列;
当有所索引时,索引a,联合索引(a,b),联合索引(a,b,c)三者的对应3个B+TREE结构上,其叶子节点末尾指向的物理磁盘是是不一样的。
结论:
1.如果没有建立索引,是按照ID主键递增排列
2.当建立了索引a,会生成一个新的结构索引(B+TREE)用来记录新的一个结构规则,方便快速查找
3.当建立索引a,索引ab,索引abc,他们三个对应的数据排序是不一样的
4.索引abc,是兼顾了索引ab,索引a的,所以有前者时后两者可以不用建立
5.当建立了索引,非索引的列默认是按照ID递增来排序的
以上就是Mysql-索引排序行的详解的内容,更多相关内容请关注PHP中文网(www.)!
# 他们的
# 是一个
# 基础上
# 建立了
# 如下图
# 这行
# 上一篇
# 数据结构
# mysql
# 主键
# 变成了
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows10系统怎么查看设备管理器_Win1
- Win11怎么开启移动热点_Windows11共享
- MAC怎么一键隐藏桌面所有图标_MAC极简模式切换
- Win10如何关闭安全中心所有通知 Win10禁用
- Win11怎么开启专注模式_Windows11时钟
- Win11怎么打开注册表_Windows 11注册
- 如何在Windows中创建新的用户账户?(标准与管
- 如何解决Windows字体显示模糊的问题?(Cle
- c++如何判断文件是否存在_c++ filesys
- Win11怎么查看激活状态_查询Windows 1
- LINUX怎么进行文本内容搜索_Linux gre
- Windows系统时间服务错误_W32Time服务
- c# F# 的 MailboxProcessor
- Go语言中slice追加操作的底层共享机制解析
- Python网络异常模拟_测试说明【指导】
- Windows10如何更改任务栏高度_Win10解
- Win11如何设置开机自动联网 Win11宽带连接
- php能跑在stm32上吗_php在stm32微控
- LINUX的SELinux是什么_详解LINUX强
- 为什么Go需要go mod文件_Go go mod
- 如何使用Golang log记录不同级别日志_Go
- Win11怎么设置开机问候语_自定义Win11锁屏
- Windows蓝屏错误0x0000002C怎么解决
- c++ unordered_map怎么用 c++哈
- mac怎么分屏_MAC双屏显示与分屏操作技巧【指南
- php8.4如何配置ssl证书_php8.4htt
- Win11麦克风没声音怎么设置_Win11麦克风权
- 如何在Golang中使用time处理时间_Gola
- 如何用::实现工具类方法调用_php静态工具类设计
- 如何用正则与预处理结合精准拦截拼接式垃圾域名
- Win11怎么关闭通知中心_Windows11系统
- Mac版Final Cut Pro入门_Mac视频
- 如何使用Golang实现容器自动化运维_Golan
- 如何在Golang中处理二进制数据_Golang
- 小程序里php怎么变mp4_小程序调用php生成m
- Win11怎么关闭用户账户控制UAC_Window
- Win11怎么设置屏保时间_调整Win11屏幕保护
- Win11相机打不开提示错误怎么修_相机权限开启与
- PyTorch DDP 多进程训练在 Kaggle
- Python与Docker容器化部署实战_镜像构建
- php怎么操作Redis_Redis扩展连接与基本
- Win11怎么关闭搜索历史_Win11清除设备上的
- 微信短链接怎么还原php_用浏览器开发者工具抓包获
- Windows怎样关闭锁屏广告_Windows关闭
- Flask 表单数据通过 SMTP 发送邮件的完整
- php打包exe后无法写入文件_权限问题解决方法【
- c++的STL算法库find怎么用 在容器中查找指
- Windows怎样关闭开始菜单广告_Windows
- Win11开机Logo怎么换_Win11自定义启动
- Win10怎么卸载金山毒霸_Win10彻底卸载金山

QQ客服