IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> mysql数据结构和算法 -> 正文阅读

[数据结构与算法]mysql数据结构和算法

索引是帮助mysql高效获取数据的排好序的数据结构

为什么数据结构不是二叉树

因为mysql数据存储在硬盘中,每次插入数据都会读写硬盘数据,二叉树原则是右边比父节点大,左边比父节点小,如果索引建立在自增ID上,查找ID为10w的数据,会查找10w次,查询效率慢。

为什么数据结构不使用红黑树

红黑树又叫平衡二叉树,是一种二叉树的扩展,在数据量大的情况下依旧无法承载索引所需要提供的查询效率,从根节点会一直找到对应的叶子节点。

B-Tree

叶节点具有相同的深度,叶节点的指针为空

所有索引元素不重复

节点中的数据索引从左到右递增排列

mysql 在内存中默认分配16kb内存,存储节点

B-Tree一个节点占用1kb 一行只可以存储16个?

B+Tree

非叶子节点不存储data,只存储索引,可以放更多索引

叶子节点包含所有索引字段

叶子节点用指针链接,提高区间访问性能

每行可以放 1024kb/(8+6)b的数据

树的高度越小,查询效率越快,所以选用B+Tree,BTree中叶子节点没有用指针链接,如果查询范围数据的话效率远不如B+Tree 如 age>50。

?

Hash

?缺点不支持范围查询

MyISAM存储引擎索引实现

存储到硬盘的文件

frm 表结构信息

MYD文件 MyISAM引擎Data文件??

MYI文件 MyISAM引擎Index文件

Index文件存储格式?

在Index文件中查找到对应的文件地址去Data文件中读取数据 找到指定数据

InnoDB存储引擎索引实现

?

?frm 表结构信息

ibd 包含索引和数据信息

表数据文件本身就按B+Tree组织的一个索引结构文件

聚集索引-叶节点包含了完整的数据记录

?为什么InnoDB表必须建主键,并推荐使用整型的自增主键?

因为如果没有建立自增主键,mysql会查找一列不重复的数据建立B+Tree索引,如果没有符合该规则的列则会建立一列隐藏列来建立索引。

如果使用字符串类型,例如UUID,会降低性能,B+Tree数据会从小到大依次排序,字符串类型使用ASCII码顺序来进行对比,性能远不及整型。

由于每次插入时也不需要移动已有数据,因此效率很高,也不会增加很多开销在维护索引上

如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。

为什么非主键索引结构叶子节点存储的是主键值?

?一致性和节省存储空间

属于非聚簇索引,找到对应的主键之后去到聚簇索引中查找对应的数据

一个表只会有一个聚簇索引

联合索引

索引最左前缀原理

?索引的原则是排好序,根据排序去查找对应的数据,它会根据字段的顺序去依次排序,如果直接查找第二个,索引会进行全表扫描,排序规则不会生效

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:40:49  更:2021-10-13 11:43:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:23:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码