首页 > 数据库 >Mysql 索引

Mysql 索引

时间:2023-12-28 17:22:20浏览次数:46  
标签:检索 查询 叶子 索引 查找 Mysql 节点

Mysql 索引

1. 索引介绍

一种用于快速查询和检索数据的数据结构,本质:一种排序好的数据结构
索引底层数据结构存在很多类型,常见的索引结构有:B树、B+树和 Hash、红黑树。在 Mysql 中,无论是 Innodb 还是 Myisam,都使用了 B+ 树作为索引结构

2. 优缺点

  1. 优点
  • 加快 数据的检索速度
  • 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
  1. 缺点
  • 创建索引耗时,当 CUD 时,如果数据有索引,那么索引也需要动态修改,降低 SQL 执行效率
  • 索引也需要物理存储,也会耗费一定空间

但是,使用索引一定能提高查询性能么?

  • 大多数情况下,索引查询比全表查询要快
  • 数据量不大时,提升不明显

3. 索引底层结构选型

Hash

不支持顺序和范围查询

二叉查找树 BST

非常依赖平衡程度

自平衡二叉查找树 AVL

AVL 树的特点:左右高度差不超过 1 ===> 查找、插入、删除复杂度都是 O(logn)
缺点;

  • 频繁地进行旋转来操作来保持平衡
  • 每个树节点仅存储一个数据,而每次进行磁盘 IO 时,只能读取一个节点的数据,如果需要查询的数据分布在多个节点上,那么就需要进行多次磁盘 IO

红黑树

B树 和 B+ 树

B 树也称 B-树,全称为 多路平衡查找树 ,B+ 树是 B 树的一种变体。B 树和 B+树中的 B 是 Balanced (平衡)的意思。

B 树& B+树两者有何异同呢?

  • B 树的所有节点既存放键(key) 也存放数据(data),而 B+树只有叶子节点存放 key 和 data,其他内节点只存放 key。
  • B 树的叶子节点都是独立的;B+树的叶子节点有一条引用链指向与它相邻的叶子节点。
  • B 树的检索的过程相当于对范围内的每个节点的关键字做二分查找,可能还没有到达叶子节点,检索就结束了。而 B+树的检索效率就很稳定了,任何查找都是从根节点到叶子节点的过程,叶子节点的顺序检索很明显。
  • 在 B 树中进行范围查询时,首先找到要查找的下限,然后对 B 树进行中序遍历,直到找到查找的上限;而 B+树的范围查询,只需要对链表进行遍历即可。

综上,B+树与 B 树相比,具备更少的 IO 次数、更稳定的查询效率和更适于范围查询这些优势。

4. 索引类型总结

标签:检索,查询,叶子,索引,查找,Mysql,节点
From: https://www.cnblogs.com/aclq/p/17933149.html

相关文章

  • Ubuntu 安装MySQL5.7
    MySQL安装安装版本:5.7.35#获取压缩包wgethttps://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz#解压tar-zxvfmysql-5.7.35-linux-glibc2.12-x86_64.tar.gz#重命名mvmysql-5.7.35-linux-glibc2.12-x86_64/usr/local/mysql#创建da......
  • es 索引生命周期管理的原理
    es的索引生命周期管理indexlifecyclemanagement即ILM,控制着索引的创建、滚动、删除、归档,属实好用,那么它是如何实现的呢?可以想象得到,es的master执行一个定时任务,定期检查关联了ilm的索引,判断索引的状态,执行状态的流转。ILM相关代码在x-pack的plugin目录中,主类是......
  • JDK、Tomcat、Redis、MySQL集齐,教你如何搭建高效性能测试项目
    前言:作为一个软件工程师,怎能不知道如何搭建一个性能测试项目呢?性能测试是一个软件工程师不可或缺的一环,因为一款软件性能好坏直接关系到用户体验,而用户体验又是一个软件能否成功的最重要的因素。本文将带你一步步搭建一个性能测试项目,包括如何搭建JDK、Tomcat、Redis和数据库,并......
  • 蛋疼的mysql_ping()以及MYSQL_OPT_RECONNECT(转)
    From: https://www.felix021.com/blog/read.php?2102昨天@Zind同学找到我之前的一篇blog(已经修改),里面提到了mysql_ping和MYSQL_OPT_RECONNECT的一些事情。之所以写那篇blog,是因为去年写的一些代码遇到了“2006:MySQLserverhasgoneaway”错误。这个问题是因为wait_timeout......
  • MySQL 5.6 到 MYSQL 5.7 应用迁移有什么问题,升级后打脸又降回去
    最近说来惭愧,有开始说mysql5.6的问题了,是在是无奈有一个项目古老且XX,大批的在用MySQL5.6这个版本的数据库,之前并未进行管理,但基于Enterprise的数据库都管理的还可以,所以这个项目也就到了手里,然后我们提出从5,6升级数据库版本的问题,并提出升级后的各种利好,但在升级过程中,我们遇......
  • mysql5.7 wait_timeout (转)
    参考:https://blog.csdn.net/ivory_town1/article/details/777023571.修改参数配置文件vi/etc/my.cnf[mysqld]wait_timeout   =28800interactive_timeout   = 28800#增加以上两列即可,因为官方文档要求修改此参数必须同时修改interactive_......
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、
    文章目录Flink系列文章一、maven依赖二、广播变量BroadcastVariables示例1、介绍2、广播变量示例3、验证三、BroadcastState与BroadcastVariable区别本文简单的介绍了flink中关于广播变量的简单使用示例。一、maven依赖为避免篇幅过长,所有基础依赖均在第一篇文章中列出,具......
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、
    文章目录Flink系列文章一、maven依赖二、Flinksink介绍三、sink到文件、console示例1、console输出2、sink到文件1)、sinktxt文件到hdfs上2)、sinkcsv文件到本地3)、sinktext文件到hdfs上(writeUsingOutputFormat)四、sink到socket示例(writeToSocket)五、Jdbc/mysql示例1、maven依......
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、
    文章目录Flink系列文章一、maven依赖二、分布式缓存(DistributedCache)示例1、介绍2、maven依赖3、实现4、验证1)、验证步骤2)、验证本文介绍了flink关于分布式缓存的使用示例,比较简单。本文除了maven依赖外,没有其他依赖。本示例需要hadoop环境可用。一、maven依赖为避免篇幅过长,所......
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、
    文章目录Flink系列文章一、maven依赖二、sink到ClickHouse示例1、介绍2、maven依赖3、创建clickhouse表4、验证clickhouseweb页面是否正常5、实现1)、userbean2)、sink实现6、验证1)、nc输入2)、启动应用程序3)、观察应用程序控制台输出4)、查看clickhouse表中的数据本文介绍了nc作......