【MySQL】索引介绍、索引的数据结构


在这里插入图片描述

个人主页: 叶落闲庭
我的专栏:
c语言
数据结构
javaEE
操作系统
Redis

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


索引

  • 一、索引概述
  • 二、索引结构
    • 2.1 B+Tree
    • 2.2 Hash

一、索引概述

  • 介绍:
  • 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

当执行一条sql语句:select* from user where age = 18;,若是这个表是无索引的,在执行这条sql的时候会遍历整个表去匹配是否存在age=18的内容,这种方式被称为是全表扫描,性能非常低;若是要查询的表是有索引的,这个表在存储数据的时候会对每一条插入的数据进行维护,形成一个二叉树,当要查询age=18就可以遍历这个二叉树而不用遍历整个表(注意:此处的二叉树并不是真实的索引结构,仅作为演示)。

  • 优缺点:
优势 劣势
提高数据检索的效率,降低数据库的IO成本 索引列也是要占用空间的
通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗 索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE时,效率降低

二、索引结构


索引结构 描述
B+Tree 索引 最常见的索引类型,大部分引擎都支持B+树索引
Hash索引 底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效不支持范围查询
R-Tree(空间索引) 空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-text(全文索引) 是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,ES

索引 InnoDB MyISAM Memory
B+Tree 索引 支持 支持 支持
Hash索引 不支持 不支持 支持
R-Tree(空间索引) 不支持 支持 不支持
Full-text(全文索引) 5.6版本之后支持 支持 不支持

【MySQL】索引介绍、索引的数据结构_第1张图片


  • 二叉树缺点:顺序插入时,会形成一个链表,查询性能大大降低。大数据量情况下,层级较深,检索速度慢。
  • 红黑树:大数据量情况下,层级较深,检索速度慢。

2.1 B+Tree

MySQL索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。


【MySQL】索引介绍、索引的数据结构_第2张图片


2.2 Hash

  • Hash索引特点:
    • Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,<,…)
    • 无法利用索引完成排序操作
    • 查询效率高,通常只需要一次检索就可以了,效率通常要高于B+tree索引

你可能感兴趣的:(#,MySQL,mysql,数据库)