y系列索引数据结构大全浮尘微光

索引是帮助MySQL高效获取数据的排好序的数据结构

对于二叉树而言,每个节点只能有两个子节点,如果是一颗单边二叉树,查询某个节点的次数与节点所处的高度相同,时间复杂度为 O(n);如果是一颗平衡二叉树,查找效率高出一半,时间复杂度为 O(Log2n)。

并且二叉树还有另一个坏处,二叉树上的每一个节点都是数据节点,那么对于一个比较高的数如果要获取最下面的数据遍历的节点数将会很消耗性能。

当单边的节点大于3时候,就会自动调整,这样可以解决二叉树的弊端;红黑树也叫平衡二叉树。

散列表的好处是散列查询单条数据比较快,但是坏处也比较多,比如 Hash 碰撞的解决,范围查找等等。

B 树是二叉树的升级版,又叫平衡多路查找树。它和平衡二叉树的区别在于:

另外,它们相同的点是节点数据也是按照左小右大的顺序排列。我们用一张图来对比它们的区别:

说到 B 树就连着 B+树一起说了。B+ 树是应文件系统所需而产生的一种 B 树的变形树(文件的目录一级一级索引,只有最底层的叶子节点(文件)保存数据)非叶子节点只保存索引,不保存实际的数据)。

在 MYSQL 中索引属于存储引级别的概念,存储引擎不同,索引的实现方式也不一样。我们分别看看看 MyISAM 和 InnoDB 中都是如何实现索引功能。

MyISAM 也是使用 B+ 树作为索引存储结构,他的叶子节点 data 域存放的是数据的物理地址,即索引结构和真正的数据结构其实是分开存储的。

MyISAM 索引和数据是分离的,但是在 InnoDB 中却大不相同,InnoDB 中采用主键索引的方式,所有的数据都保存在主键索索引中。

所以这也是为什么 InnoDB 要求每个表都必须要有主键的原因。本身就是基于主键来组织的数据存储。

以下所有索引类型都是基于 InnoDB 引擎。

主键索引也就是我们说的聚集索引。上面说过主键索引是基于主键来创建的 B+ 树索引结构,如果没有指定主键,也找不到任何一列不重复的列可以作为主键的情况下,InnoDB 会新增一个隐藏列 RowId 作为主键继而创建聚集索引。

二级索引就是指除了主键索引外的索引。主键索引和所有的二级索引都是各自维护各自的 B+ 树结构,但是有个不同的地方在于,二级索引的叶子节点存储的不是数据,而是主键索引对应的主键值。

即二级索引不再保存一份 data 数据,而是去主键索引中查数据。那么对于二级索引查找一条数据索要做的操作就是:

所以这里需要两次 B+ Tree 查找。

覆盖索引简单来说就是只查询索引就能获取到数据不必再回表查询,换句话说要查询的列已经被索引列覆盖。

使用覆盖索引有如下优点:

有的时候我们会对多个列建立一个索引,这种索引被称为联合索引。而关于联合索引的建立和使用,从工作开始你的各位 “师长” 都在教导你要遵循 “左前匹配原则”,那到底是为什么呢?什么是左前匹配原则呢?

比如我们有这样一张表:

上表建立了一个联合索引:idx_a_b_c。下面给出一个 SQL, 大家看它会不会走索引查询:

很显然根据 “左前匹配原则” 肯定不会走索引查询,最终还是全表扫描。

原因就在于联合索引的结构上。上面对 a,b,c 三个字段建立索引,那么对应的 B+ Tree 索引结构每个节点其实是按照三个字段的前后顺序排列的,即 a 字段检索在最前面,然后是 b,然后是 c。如果你的查询不是按照这个顺序来检索,是不会被这个索引识别的。

上面说到联合索引会遵循左前匹配原则,那么什么是左前匹配呢?

其实就是字面意义上的从建立索引的第一个字段开始先匹配查询条件,如果当前查询条件不是第一个字段那么就不会走该索引。

另外对于联合索引的使用也有一些限制,比如说:

「遇到范围查询 ( > ,<, between, like) 就会停止匹配」

比如哦我们看这个 SQL:

大家觉得这个 SQL 会如何使用索引呢?

其实这 SQL 在前面 a,b 的查询中是会走联合索引的,但是在经历了 d 的查询之后,到了 c 就不会使用索引了,因为 d 的查询已经将索引的顺序打乱了,从 d 条件过后就没有办法直接使用联合索引。

THE END
0.MySQL索引与页结构页结构图 图示说明: 1111a,分别表示col1,col2,col3,col4,col5 五列数据。红色标记为以主键构造的主键索引,也为聚簇索引。 用户数据区:数据为链表结构,对于链表结构而言,插入性能较高,而查询性较低,因此这个链表的长度不会很长,那么mysql是怎么解决这个问题的呢?当然是通过页目录来解决。 jvzquC41dnuh0lxfp0tfv8|gkzooa=95::<9;8ftvkimg8igvcomu86487=54:8
1.国内超大索穹顶张拉完成,坚朗自主研发智慧索首次应用特别是,光纤光栅智慧索凭借监测精度高、量程大、耐久性好、抗电磁干扰、信号容量大和损耗小的优点,首次被成功应用于三个场馆中,开启国内索结构体系健康监测的新纪元。 坚朗五金自2018年项目设计之初,便积极参与建筑方案选型、结构参数设计、张拉施工模拟分析、节点深化设计等全链条工程配合,并持续加大自主研发力度,开发出jvzquC41fyixd7hqo1tfy|nphq537=57494ivvq
2.珠江科学大讲堂第121讲:中国天眼与南仁东的故事如何建设?柔性网索结构实现反射面变位 姚蕊还介绍说,在20世纪90年代,中国已有的射电望远镜最大直径仅有25米,而美国的Arecibo射电望远镜经过扩建后直径达到了350米。而直径越大,射电望远镜的灵敏度则越高,灵敏度直接决定了能“看到”多暗的信号。因此,如果我们想看到别人看不到的信号,就要建直径更大的射电望远镜。jvzquC41pg}t0‚hyd0ipo872463168761euovnsva7876<6970nuo
3.岗位上的坚守!“五一”施工不打烊他们坚守在一线抢工期荆楚网五一期间,由中建八局东北公司承建的大连梭鱼湾足球场项目仍是机械轰鸣、一派繁忙景象。目前,项目建设者们经过177天努力施工,在昨天上环索提升、撑杆安装、拉索提升、交叉索施工的目标如期完成。 中建八局东北公司大连梭鱼湾专业足球场项目经理 么德生:今天我们完工的是体育场屋面罩棚索结构体系,是本工程最为重要的分项jvzq<84pgyy/ewmwdgo/exr1eqtugwy14283/9:1245dqwygpve26@6742;/j}rn
4.索引的原理·数据库·看云索引是一种利用某种规则的数据结构与实际数据的关系加快数据查找的功能;索引数据节点中有着实际文件的位置,因为索引是根据特定的规则和算法构建的,在查找的时候遵循索引的规则可以快速查找到对应数据的节点,从而达到快速查找数据的效果;其实宏观来说索引其实是一种概念而不是具体的某项技术,只是我们在某个技术中运用得比jvzquC41yy}/mjsenq{e0ls1htkzc9531fguckfug182:B<66
5.土木工程学院主要从事大型复杂土木工程结构分析和施工技术的教学和科研工作,致力于大跨空间预应力索结构的分析、设计、施工和测试技术及工程应用的研究,主持和参与的科研项目有:科技部“应用于FAST反射面闭环控制的实时仿真系统”、“基于塔架提升索杆累积安装的索穹顶施工关键力学分析和技术研究”和“基于向量式有限元的预应力空间结构jvzquC41ek|jn7xgw0kew7hp1nh0nrxv0jzn
6.LiuHongbo本科生课程《通用结构分析软件》 本科生课程《现代预应力结构》 研究生课程《大跨度建筑结构体系》 主要学术兼职: 1) 中国钢结构协会 理事 2) 中国建筑金属结构协会铝结构分会 秘书长 3) 中国钢结构协会结构稳定与疲劳分会 理事 4) 中国钢结构协会空间结构分会索结构专业委员会 委员 jvzq<84liz/vsz0gf{/ew4kphu03:9;14=777mvo
7.《MySQL高级篇》四索引的存储结构mysql索引存储结构《MySQL高级篇》四、索引的存储结构 本文详细解析了数据库索引的原理,包括B+树的构建与优化,聚簇索引与非聚簇索引的区别,以及MyISAM和InnoDB存储引擎的索引实现。讨论了索引的优缺点,指出索引在提高查询效率的同时,也会增加存储空间和维护成本。此外,还提到了哈希索引和R树等不同类型的索引结构及其适用场景。最后,强调了合理选择数 jvzquC41dnuh0lxfp0tfv8fufhgecoi1ctzjeuj1fgzbkux134<16;>23
8.sql索引的介绍以及使用规则详析Mysql3。如果表没有主键,或没有合适的唯一索引,则 InnoDB 会自动生成一个 rowid 作为隐藏的聚集索 引。 聚集索引和二级索引的具体结构如下图所示。 聚集索引的叶子节点下挂的是这一行的数据 , 二级索引的叶子节点下挂的是该字段值对应的主键值。 执 行如下的 SQL语句时,具体的查找过程如下所示。 具体过程如下: 1jvzquC41yy}/lk:30pku1jwvkerf1;<;;6:/j}r