免费编程网站,曰照网站小程序建设,软件项目管理方法,蚌埠房产网#x1f40c;个人主页#xff1a; #x1f40c; 叶落闲庭 #x1f4a8;我的专栏#xff1a;#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也#xff0c;而不可夺坚#xff1b;丹可磨也#xff0c;而不可夺赤。 索引 一、索引概述二、索引结构2.1 BTree2.… 个人主页 叶落闲庭 我的专栏 c语言 数据结构 javaEE 操作系统 Redis 石可破也而不可夺坚丹可磨也而不可夺赤。 索引 一、索引概述二、索引结构2.1 BTree2.2 Hash 一、索引概述
介绍索引(index)是帮助MySQL高效获取数据的数据结构有序。在数据之外数据库系统还维护着满足特定查找算法的数据结构这些数据结构以某种方式引用指向数据这样就可以在这些数据结构上实现高级查找算法这种数据结构就是索引。 当执行一条sql语句select* from user where age 18;若是这个表是无索引的在执行这条sql的时候会遍历整个表去匹配是否存在age18的内容这种方式被称为是全表扫描性能非常低若是要查询的表是有索引的这个表在存储数据的时候会对每一条插入的数据进行维护形成一个二叉树当要查询age18就可以遍历这个二叉树而不用遍历整个表注意此处的二叉树并不是真实的索引结构仅作为演示。 优缺点
优势劣势提高数据检索的效率降低数据库的IO成本索引列也是要占用空间的通过索引列对数据进行排序降低数据排序的成本降低CPU的消耗索引大大提高了查询效率同时却也降低更新表的速度如对表进行INSERT、UPDATE、DELETE时效率降低
二、索引结构 索引结构描述BTree 索引最常见的索引类型大部分引擎都支持B树索引Hash索引底层数据结构是用哈希表实现的只有精确匹配索引列的查询才有效不支持范围查询R-Tree空间索引空间索引是MyISAM引擎的一个特殊索引类型主要用于地理空间数据类型通常使用较少Full-text全文索引是一种通过建立倒排索引快速匹配文档的方式。类似于Lucene,Solr,ES 索引InnoDBMyISAMMemoryBTree 索引支持支持支持Hash索引不支持不支持支持R-Tree空间索引不支持支持不支持Full-text全文索引5.6版本之后支持支持不支持 二叉树缺点顺序插入时会形成一个链表查询性能大大降低。大数据量情况下层级较深检索速度慢。红黑树大数据量情况下层级较深检索速度慢。
2.1 BTree
MySQL索引数据结构对经典的BTree进行了优化。在原BTree的基础上增加一个指向相邻叶子节点的链表指针就形成了带有顺序指针的BTree,提高区间访问的性能。 2.2 Hash
Hash索引特点: Hash索引只能用于对等比较(in),不支持范围查询(between,,,…) 无法利用索引完成排序操作 查询效率高通常只需要一次检索就可以了效率通常要高于Btree索引