罗定市建设局网站,专门做实习计算机项目的网站平台,可以做微信游戏的网站有哪些,wordpress 页面 关闭评论1 索引介绍
1.1 什么时MySQL的索引
MySQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。 MySQL在存储数据之外#xff0c;数据库系统中还维护着满足特定查找算法的数据结构#xff0c;这些数据结构以某种引用(指向)表中的数据#xff0c;这样我们就可以通…1 索引介绍
1.1 什么时MySQL的索引
MySQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。 MySQL在存储数据之外数据库系统中还维护着满足特定查找算法的数据结构这些数据结构以某种引用(指向)表中的数据这样我们就可以通过数据结构上实现的高级查找算法来快速找到我们想要的数据。而这种数据结构就是索引。 简单理解为“排好序的可以快速查找数据的数据结构”。
1.2 索引数据结构
1.⼆叉树查找
我们都学过⼆分查找如果我们⼀开始在插⼊数据就将数据按顺序排列那查找效率就会⼤⼤提⾼。将数据按照顺 序⼆叉树排列好每次查询就可以使⽤⼆分法即从根节点出发查询效率就增加了 但是如果删除了⼀些数据⽐如06134删除了那么右边的数据就有变成了线性的了查询效率就会浪费 2 平缓二叉树
如果有这样⼀棵树左右⼦树⾼度差不超过 1⽽且也满⾜顺序排列就可以继续⾼效下去然后平衡⼆叉树就出现 了。每当删除⼀个节点都应该发⽣相应的节点位置转换反转保证⼆叉树的平衡。 我们⽆⾮就是想让查找效率变高从线性的 On 到 O (logn为什么不⽤更⾼效的 Hash 地址法来查找呢这样可以降到 O1答案是在查询过程中我们不仅有等值查询还有范围查询 模糊查 询使⽤ Hash 存储其位置的不确定性如果要查询 范围我们就要遍历全表。⽽⼆叉树只要遍历左右节点。
3.B树 由于平衡⼆叉树的⼆叉特点它每⼀个节点最多只有 2 个叉假设有 100000 个数据那么树的深度将会变得特别 深⽽每次⽐较就是拿⽐较的树和节点上的数在内存⽐较所以每⽐较⼀次就是⼀次 IO 操作就下降⼀层层数越 多时间就越久。所以B树就来了他是多叉平衡树每个节点维护了多个⽐较范围即⼦节点 这样就降低了⾼度每个圆圈可以理解为⼀⻚16kb的数据. 所以他的每个节点都存储数据就会造成每个结点的分 叉数减少⽽且会造成先靠近根节点的先查到靠近叶⼦结点的后查到。同样范围查找也会出现多次回退到⽗节点 在到另⼀个兄弟节点的低效率问题。
4.B树
我们改造⼀下 B树 为 B 树 每个⾮叶⼦节点只存索引真实数据都存在叶⼦节点这样⾮叶⼦节点的空间 单个 数据空间 减少 数量即分叉就可以增⼤。每次查询⽆论如何必须遍历到叶⼦节点才会结束这样深度⼜减少了同 时我们把每个叶⼦结点⽤双向链表连接起来范围查询就更快。 1.3 索引优势
提高数据检索的效率降低数据库的Io成本。 通过索引对数据进行排序降低数据排序的成本降低了CPU的消耗。
1.4 索引劣势
索引实际上也是一张表保存了主键和索引的字段并且指向实体表的记录所以索引也索引实际上也是一张表保存了主键和索引的字段并且指向实体表的记录所以索引也是需要占用空间的。在索引大大提高查询速度的同时却会降低表的更新速度在对表进行数据增删改的同时MySQL 不仅要更新数据还需要保存一下索引文件。每次更新添加了的索引列的字段都会去调整因为更新带来的减值变化后的索引的信息。
1.5 索引使用场景 1.主键自动建立唯一索引 2.频繁作为查询条件的字段应该创建索引(where后面的语句) 3.查询中与其它表关联的字段外键关系建立索引 4.多字段查询下倾向创建组合索引 5.查询中排序的字段排序字段若通过索引去访问将大大提高排序速度 6.查询中统计或者分组字段 那些情况不推荐建立索引 1.表记录太少 2.经常增删改的表 3.where条件里用不到的字段