甲马营seo网站优化的,元旦海报设计图片手绘图,网站频繁改版,换域名对网站的影响索引概述
索引是帮助MySQL高效获取数据的数据结构#xff08;有序#xff09;。
在数据之外#xff0c;数据库系统还维护着满足特定查找算法的数据结构#xff0c;这些数据结构以某种方式引用#xff08;指向#xff09;数据#xff0c;这样就可以在这些数据结构上实现…索引概述
索引是帮助MySQL高效获取数据的数据结构有序。
在数据之外数据库系统还维护着满足特定查找算法的数据结构这些数据结构以某种方式引用指向数据这样就可以在这些数据结构上实现高级查找算法这种数据结构就是索引。
下图演示有索引和无索引的区别 备注上述二叉树索引结构的只是一个示意图并不是真实的索引结构
优缺点
优势
1、提高数据检索的效率降低数据库的I/O成本。
2、通过索引列对数据进行排序降低数据排序的成本降低CPU的消耗。
劣势基本忽略
1、索引列也是要占用空间的但是现在磁盘很便宜
2、索引大大提高了查询效率同时也降低了更新表的速度如对表进行插入、删除、更新时效率降低。
索引结构
MYSQL的索引是在存储引擎层实现的不同的存储引擎有不同的索引结构主要包含以下几种
索引结构 描述 BTree索引最常见的索引类型大部分引擎都支持B树索引Hash索引底层数据结构是用哈希表实现的只有精确匹配索引列的查询才生效不支持范围查询R-tree空间索引空间索引是MYISAM引擎的一个特殊索引类型用于地理空间数据类型通常使用比较少Full-text全文索引是一种通过建立倒排索引快速匹配文档的方式 BTree索引
二叉树
左边的节点的值比父节点值小右边节点的值比父节点值大 二叉树缺点顺序插入时会形成一个链表查询性能大大降低。在大多数情况下层级较深检索速度慢。
红黑二叉树自平衡二叉搜索树
红黑树是一种高效的自平衡二叉查找树用于存储有序的数据并在插入和删除操作时能够快速地进行调整以保持其性质。 B-Tree树多路平衡查找树
以一颗最大数max-degree为55阶的b-tree为例每个节点最多存储4个key5个指针
注意树的度数指的是一个节点的子节点个数。
插入100 65 169 368 900 556 780 35 215 1200 134 888 158 90 1000 88 120 268 250 具体动态变化过程参考网站https://www.cs.usfca.edu/~galles/visualization/BTree.html
BTree树
插入100 65 169 368 900 556 780 35 215 1200 234 888 158 90 1000 88 120 268 250 动态变化过程参考网站https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
相较于B-Tree区别
1、所有数据都会出现在叶子节点
2、叶子节点形成一个单向链表
MySQL中BTree树
MYSQL索引数据结构对经典的BTree树进行了优化。在原BTree的基础上增加一个指向相邻叶子节点的链表指针就形成了带有顺序指针的BTree提高了访问性能。 Hash索引
哈希索引就是采用一定的哈希算法将键值换算成对应的哈希值映射到对应的槽位上然后存储在哈希表中。
如果两个或多个键值映射到一个相同的槽位上他们就会产生哈希冲突也称哈希碰撞可以通过链表来解决。 哈希索引特点
1、哈希索引只能用于对等比较in,不支持范围查询between
2、无法利用索引完成排序操作
3、查询效率高通常只需要一次检索就可以了效率高于BTree索引
存储引擎支持
在MySQL中支持hash索引的是MEMORY引擎而InnoDB中具有自适应的哈希功能哈希索引是存储引擎根据BTree索引在指定条件下自动构建的。
面试题为什么InnocentDB存储引擎选择使用BTree索引结构
1、相较于二叉树层级更少搜索效率高
2、对于b-tree无论是叶子节点还是非叶子节点都会保存数据这样导致一页中存储的键值减少指针也跟着减少要同样保存大量数据只能增加树的高度导致性能下降
3、相较于哈希索引BTree支持范围匹配和排序操作