【MySQL】索引介绍、索引的数据结构-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
个人主页 叶落闲庭
我的专栏
c语言
数据结构
javaEE
操作系统
Redis
石可破也而不可夺坚丹可磨也而不可夺赤。
索引
一、索引概述
- 介绍
- 索引(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版本之后支持 | 支持 | 不支持 |
- 二叉树缺点顺序插入时会形成一个链表查询性能大大降低。大数据量情况下层级较深检索速度慢。
- 红黑树大数据量情况下层级较深检索速度慢。
2.1 B+Tree
MySQL索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上增加一个指向相邻叶子节点的链表指针就形成了带有顺序指针的B+Tree,提高区间访问的性能。
2.2 Hash
- Hash索引特点:
-
- Hash索引只能用于对等比较(=in),不支持范围查询(between,>,<,…)
-
-
- 查询效率高通常只需要一次检索就可以了效率通常要高于B+tree索引
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |