mysql进阶-索引基础

这篇具有很好参考价值的文章主要介绍了mysql进阶-索引基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 概念-索引是什么?

2. 索引的数据结构(索引模型)

2.1 二分查找:

2.2 二叉查找树(BST Binary Search Tree):

2.3 平衡二叉树(AVL Tree Balanced binary search trees)

2.4 多路平衡查找树(B Tree Balanced Tree)

2.5 加强版多路平衡查找树(B+ Tree)

3. innodb如何存储索引和数据的?

3.1 索引分类

3.2 索引如何存储数据

4. 注意事项


1. 概念-索引是什么?

索引相当于一本书籍的目录,它是帮助数据库快速检索数据的一种数据结构。

维基百科的定义

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中的数据。

索引的简单示例图:

mysql进阶-索引基础,MySql,mysql,索引基础

索引的好处就是查询更快。比较如下:

没有索引:查询数据时只能从磁盘中按顺序读取数据,直到找到所需要的数据。

有索引:从索引中找到数据存储的位置,然后直接从磁盘位置读取数据。

2. 索引的数据结构(索引模型)

索引的数据结构是B+Tree树。

比较一下相关的数据结构的优缺点:

2.1 二分查找:

优点:针对于有序数组,等值查询和比较查询的效率非常高。

缺点:更新数据可能需要挪动大量的数据。

适用场景:静态存储的数据。

2.2 二叉查找树(BST Binary Search Tree):

示例图:

mysql进阶-索引基础,MySql,mysql,索引基础

特点:左子树所有的节点都小于父节点,右子树所有的节点都大于父节点。

优点:既能实现快速查找,又能够实现快速插入

缺点:查询耗时和这棵树的深度相关。假设我们的数据构成二叉查找树后,正好是一棵斜树,那么就和顺序查找的效率是一样的。

2.3 平衡二叉树(AVL Tree Balanced binary search trees)

定义:左右子树深度差绝对值不能超过1.

如何平衡:AVL树在插入和更新数据的时执行了1系列的计算和操作(左旋、右旋)来保证树的平衡。

存储特点:每个节点需要存储键值、数据磁盘地址、子节点引用

优点:解决了二叉查找树极端的斜树情况。

缺点:每个节点存储的数据太少,如果数据较多,树的深度依然很大。

2.4 多路平衡查找树(B Tree Balanced Tree)

示例图:

mysql进阶-索引基础,MySql,mysql,索引基础

特点:分叉数永远比关键字数多1

如何平衡:分裂和合并

2.5 加强版多路平衡查找树(B+ Tree)

示例图:(图片来源于百度图片)

mysql进阶-索引基础,MySql,mysql,索引基础

特点:1.关键字数和路数相等 2. B+Tree的根节点和枝节点中都不存储数据,只有叶子节点才存储数据。

优势:

        1. 扫库、扫表能力更强

         2. B+ Tree 的磁盘读写能力更强

        3.排序能力更强

        4. 效率更加稳定(B+Tree永远是在叶子节点拿到数据,所以IO次数是稳定的)。

3. innodb如何存储索引和数据的?

在innodb中索引即数据。

3.1 索引分类

聚集索引:索引键值的逻辑顺序和表数据据行的物流存储顺序是一致的。

二级索引(辅助索引):如果表有主键,那么主键索引就是聚集索引,其他的索引统一叫二级索引。

3.2 索引如何存储数据

主键索引存储了所有的数据。

二级索引并不会把完整记录在叶子节点放一份,因为这会带来额外的存储空间和计算浪费。二级索引的叶子节点存的是这条记录对应的主键的值。如果需要拿除索引和主键之外的值,需要再到主键索引的叶子节点拿到数据(这就是回表的概念)。

示例图:(图片来源于百度图片)

mysql进阶-索引基础,MySql,mysql,索引基础

4. 注意事项

1.不要在频繁更新的列上建索引,因为会引起分裂和合并文章来源地址https://www.toymoban.com/news/detail-788712.html

到了这里,关于mysql进阶-索引基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL视图索引基础练习

    学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系 Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名 Cno为主键 学生选课表:SC (Sno, Cno, Score) 学号,课程号,成绩 Sno,Cno为主键 (1)创建课程表: (2)给学生表、课程表、学生选课表插入数据 a.学生表(Stud

    2024年01月17日
    浏览(36)
  • mysql基础_索引

    “索引”是为了能够更快地查询数据。比如一本书的目录,就是这本书的内容的索引,读者可以通过在目录中快速查找自己想要的内容,然后根据页码去找到具体的章节。 优势:以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序; 劣势:

    2024年02月05日
    浏览(17)
  • 【由浅入深学MySQL】之MySQL索引基础入门

    本系列为:MySQL数据库详解,为千锋教育资深教学老师独家创作 致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【关注】持续追更~ 文末有本文重点总结,技术类问题,也欢迎大家和我们沟通交流! 从今天开始本

    2024年02月05日
    浏览(47)
  • MySQL基础(六)-索引(index)详解

    目录 一、什么是索引? 二、索引的实现原理 三、在MySQL中,主键、unique字段上会自动添加索引。 四、索引的创建与删除 创建索引: 删除索引: 五、查看SQL语句是否使用了索引 六、索引的失效 失效的第一种情况:模糊匹配当中以“%”开头 失效的第二种情况:使用or 失效的

    2024年02月16日
    浏览(45)
  • MySQL 基础面试题02(事务&索引)

    1.什么是 MySQL 事务? MySQL 事务是指一组操作,是一个不可分割的工作单位,可以确保一组数据库操作要么全部执行,要么全部不执行。换句话说,事务是 MySQL 中保证数据一致性和完整性的机制。 在 MySQL 中,事务可以用来保证数据库中数据的一致性和完整性,例如在向数据库

    2024年02月12日
    浏览(33)
  • MySQL索引和视图基础练习题

    学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名Cno为主键 学生选课表:SC (Sno, Cno, Score) 学号,课程号,成绩Sno,Cno为主键 1.用SQL语句创建学生表Student,定义主键,姓名不能重名,性别只能输入男或女

    2024年01月17日
    浏览(43)
  • MySQL基础(二十四)索引的数据结构

    顺序查询和数据使用二叉树结构再进行查询,如图: 2.1 索引概述 MySQL官方对索引的定义为: 索引(Index)是帮助MySQL高效获取数据的数据结构 。 **索引的本质:**索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。这些数据结构以某种方

    2024年02月03日
    浏览(46)
  • 【MySql】MySql索引的作用&&索引的理解

    【MySql】MySql索引的作用索引的理解 索引是与效率挂钩的,所以没有索引,可能会存在问题 索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的 create index ,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,

    2024年02月09日
    浏览(41)
  • 【MySQL】MySQL索引特性

    索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的 create index ,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以

    2024年03月14日
    浏览(36)
  • 【MySQL】MySQL索引详解

    文章中包含了: 1.什么是索引 2.索引的数据结构,以及各自的使用场景 3.为什么要设置主键自增? 4.基于主键索引和普通索引的查询有什么区别? 5.什么是回表 6.InnoDB 的索引模型 索引的使用就是为了提高查询数据的效率,就像书的目录一样 哈希表 哈希表是一种以键值存储的

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包