上一篇刚刚简洁化的介绍了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 12 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-索引总结:http://blog.csdn.net/ty_hf/article/details/53526405
当新insert一条数据时,存储数据的同时,也会维护此表的一个索引,把它安放到一个合适的位置。解释了为什么再数据量特别大的时候索引可能会有负面影响,在被索引的表上INSERT和DELETE会变慢,频繁的插入删除数据同样会对维护索引消耗时间,瓶颈多少??500W?待考证。
以上就是Mysql-索引数据排序的内容,更多相关内容请关注PHP中文网(www.php.cn)!

ACID属性包括原子性、一致性、隔离性和持久性,是数据库设计的基石。1.原子性确保事务要么完全成功,要么完全失败。2.一致性保证数据库在事务前后保持一致状态。3.隔离性确保事务之间互不干扰。4.持久性确保事务提交后数据永久保存。

MySQL既是数据库管理系统(DBMS),也与编程语言紧密相关。1)作为DBMS,MySQL用于存储、组织和检索数据,优化索引可提高查询性能。2)通过SQL与编程语言结合,嵌入在如Python中,使用ORM工具如SQLAlchemy可简化操作。3)性能优化包括索引、查询、缓存、分库分表和事务管理。

MySQL使用SQL命令管理数据。1.基本命令包括SELECT、INSERT、UPDATE和DELETE。2.高级用法涉及JOIN、子查询和聚合函数。3.常见错误有语法、逻辑和性能问题。4.优化技巧包括使用索引、避免SELECT*和使用LIMIT。

MySQL是一种高效的关系型数据库管理系统,适用于存储和管理数据。其优势包括高性能查询、灵活的事务处理和丰富的数据类型。实际应用中,MySQL常用于电商平台、社交网络和内容管理系统,但需注意性能优化、数据安全和扩展性。

SQL和MySQL的关系是标准语言与具体实现的关系。1.SQL是用于管理和操作关系数据库的标准语言,允许进行数据的增、删、改、查。2.MySQL是一个具体的数据库管理系统,使用SQL作为其操作语言,并提供高效的数据存储和管理。

InnoDB使用redologs和undologs确保数据一致性和可靠性。1.redologs记录数据页修改,确保崩溃恢复和事务持久性。2.undologs记录数据原始值,支持事务回滚和MVCC。

EXPLAIN命令的关键指标包括type、key、rows和Extra。1)type反映查询的访问类型,值越高效率越高,如const优于ALL。2)key显示使用的索引,NULL表示无索引。3)rows预估扫描行数,影响查询性能。4)Extra提供额外信息,如Usingfilesort提示需要优化。

Usingtemporary在MySQL查询中表示需要创建临时表,常见于使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通过优化索引和重写查询避免其出现,提升查询性能。具体来说,Usingtemporary出现在EXPLAIN输出中时,意味着MySQL需要创建临时表来处理查询。这通常发生在以下情况:1)使用DISTINCT或GROUPBY时进行去重或分组;2)ORDERBY包含非索引列时进行排序;3)使用复杂的子查询或联接操作。优化方法包括:1)为ORDERBY和GROUPB


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

Dreamweaver Mac版
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。