首页 > 数据库 >数据库索引的底层原理

数据库索引的底层原理

时间:2023-02-25 00:01:30浏览次数:50  
标签:数据库 索引 存放 IO 磁盘 数据 底层

1. 数据库索引

  数据库每次做的DML(增删改查)操作都是要进行磁盘IO的读取,每次操作磁盘IO,会消耗很大的时间,所以引入索引这个概念,索引它是将无序的数据变得有序化,即在数据被插入的时候,在内存中会根据索引键对数据进行排序。

  1. 内存和外存

    内存:即内存卡,读取速度快,但是容量很小,不会长期保存数据

    外存:即磁盘,他的读取熟读慢,可能比内存慢上万倍,可以长期保存数据

  2. 数据库数据存储地址

    数据库的数据往往都是很大的,一般需要存储在外存中,需要的时候需要操作磁盘IO,每次磁盘IO都是很耗费时间的,所有数据库对数据操作优化是,通过索引来提高数据库的查询速度。

  3. 数据库索引的种类

    1. 主键索引:主键即主键索引,数据库在建表的时候有且只有一个主键,唯一非空

    2. 普通索引:普通索引没有限制,index

    3. 唯一索引:索引值唯一可以为空,unique index

    4. 联合索引:由多个key组成的所有,遵循最左原则

  4. 数据库读取数据的过程

    数据库执行一条查询语句时,会进行一次磁盘IO,会将该数据的相邻数据同时取出放到内存的缓冲区中,我们称这一组数据为页(page),一页的大小由操作系统决定,4k或者8k,当我们下一次去读取这一页的数据时,会去内存中操作,不会进行磁盘IO操作,大大减少了查询时间。MySQL数据库不管是innoDB还是myISAM引擎,它索引底层数据结构都是B+树。

 

2. 索引底层数据结构

  1. B+树

    二叉树的查询时间复杂度是O(logN),即树的高度,但是数据一旦庞大起来,树的深度也是很大的,B+树可以解决树的深度,他的多叉树,可以有效降低树的深度,详细了解树的内容:B树和B+树

    

 

 

 

 3. 为什么使用B+树而不是用B树

  1. B+树的磁盘IO次数更少

    B+树和B树的区别即使数据的存放位置,B+树的叶子节点存储数据,非叶子节点存放键,B树的数据存放在各个节点上。因为磁盘IO读取存放在内存中的页大小是固定的,B+树的非叶子结点只存放键和指针,那么他可以存放的键就会很多很多,一次磁盘IO读取的键就会更多,树的阶越大,那么树的深度就会降低。

  2. B+树查询更加稳定

    由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

  3. B+树有利于范围查询

    B树在提高了IO性能的同时并没有解决元素遍历的我效率低下的问题,正是为了解决这个问题,B+树应用而生。B+树只需要去遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作或者说效率太低。

 

4. 不同存储引擎的B+树

  1. innoDB

    innoDB的存储特点是:表结构单独存放在.frm中,数据和所有存放在ibddataN中,即我们可以通过索引直接在叶子节点读取到数据,但是如果通过其他字段创建了索引,那么它通过普通索引找到存储的主键值,然后再通过主键索引找到响应的数据,这样他的磁盘IO就增加了。

    

 

 

  2. myISAM

    myISAM的存储特点是:表结构存放在.frm文件中,表数据存放在MYD文件中,索引存放在MYI中,即叶子结点存放的一个地址,指向表数据,我们通过索引找到指定叶子节点,在通过地址找到对应的数据。

    

 

标签:数据库,索引,存放,IO,磁盘,数据,底层
From: https://www.cnblogs.com/chf333/p/17153577.html

相关文章

  • Mysql数据库的表结构
    【INFORMATION_SCHEMA数据库】 是MySQL自带的,它提供了访问数据库 元数据 的方式,元数据:数据库名或表名,列的数据类型,或访问权限等。在MySQL中,把【INFORMATION_SCHEMA】......
  • MYSQL的存储引擎以及系统数据库
    今天分享的是mysql的存储引擎,以及mysql数据库中相关配置状态和相关的变量存储引擎MyISAM存储引擎MyISAM引擎特点不支持事务表级锁定读写相互阻塞,写入不能读,读时不能写只缓......
  • Redis设计与实现—数据库与过期键策略
    前言深入了解一下Redis内存机制如何存储数据,以及对于过期数据采取何种策略来清理。@目录前言一、Redis服务器中的数据库二、数据库键空间2.1数据存储——键空间dict2.......
  • Mysql、(四) 索引优化
    @目录一、查看SQL执行频率二、定位低效率执行SQL1.showprocesslist:2.慢查询日志三、SQL中JOIN四、explain性能分析五、索引优化1)单表索引优化2)两表索引优化3)......
  • Mysql、(二) 索引
    @目录一、索引概述二、索引的优势劣势三、索引结构BTREE索引B+TREE索引1.结构介绍2.Mysql中的B+树四、索引分类4.1InnoDB_聚簇索引聚簇索引的优点:聚簇索引的缺点:4.2In......
  • (数据库系统概论|王珊)第七章数据库设计-第二节:需求分析
    ​​pdf下载:密码7281​​​​专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解​​注意更多可参照软件工程相关内容,请点......
  • (数据库系统概论|王珊)第七章数据库设计-第二节:需求分析
    pdf下载:密码7281专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解目录一:需求分析的任务二:需求分析的步骤和方法(1)步......
  • 数据库架构、SQL漏洞注入
    找到数据库中的table表和colmuns表,里面是本机所有的数据库。    在vscode中找到php中的sql语句。      只有list.php中的第46行是有变量的sql语句,......
  • MySQL数据库架构&SQL注入漏洞
    1.查找zblog数据库中有哪些表查找目标表(zbp_member)中的的字段查找目标表中的目标数据(管理员的用户名密码)4.使用UNION语句替换掉原有查询结果,显示zblog数据库中的所有表。网......
  • MySQL数据库学习笔记1
    MySQL数据库学习笔记1MySQL服务器启动与连接#启动mysql.serverstart#连接mysql-uroot-pMySQL数据库的数据模型客户端访问MySQL数据库,是与数据库管理系统交......