抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

如何设计一个关系型数据库

程序实例:

  1. 存储管理

  2. 减少对数据的访问,提供缓存机制(全页缓存)

  3. SQL解析

  4. 日志管理:缓存不易过大,提供淘汰策略,在数据库修改之后及时修改缓存,进行主从同步和灾难恢复

  5. 权限划分

  6. 容灾机制

  7. 索引管理

  8. 锁管理

影响数据的运行瓶颈就是IO

存储(文件系统)

索引模块

为什么使用索引

原始数据的查询方法就是将全表放入内存中,全表扫描轮询找到需要查找的数据,少量数据可以,大量数据严重影响性能。

什么样的信息能成为索引

主键:唯一键以及普通键

索引的数据结构

生成索引,建立二叉查找树进行二分查找(二叉树–平衡二叉树–红黑树)

因为是二分查找,时间复杂度为O(logn)

生成索引,建立B-Tree结构进行查找

因为添加结点导致二叉树的深度增加,虽然进行旋转可以使其继续维持平衡,但是增加了IO,降低了性能,因此提供了B-Tree结构(平衡多路查找树)。

每个结点最多有m个孩子,这个结点就是M阶B树

每个存储块包括关键字和指向结点的指针,最多有几个孩子取决于存储块的容量和数据库的相关配置

生成索引,建立B+-Tree结构进行查找

生成索引,建立Hash结构进行查找

密集索引和稀疏索引的区别

密集索引

密集索引文件中每一个搜索码值都对应一个索引值,就是叶子节点保存的不只是键值,还保存了位于同一行记录里的其他列信息,由于密集索引决定了表的物理排列顺序,一个表只有一个物理排列顺序,所以一个表只能创建一个密集索引。

稀疏索引

稀疏索引文件只为索引码的某些值建立索引项,比如InnoDB的其他索引只存了键位信息和主键,MyISAM的所有索引都是稀疏索引。

密集索引和稀疏索引的区别

MyISAM–》 主键索引,唯一键索引,还是普通索引 —都是 稀疏索引

额外知识

InnoDB
  • 若一个主键被定义,该主键则作为密集索引
  • 若没有主键被定义,该表的第一个唯一非空索引则作为密集索引
  • 若不满足以上条件,InnoDB内部会生成一个隐藏主键(密集索引)
  • 非主键索引存储相关键位和其对应的主键值,包含两次查找

在这里插入图片描述

InnoDB聚簇表分布

myisam在磁盘存储上有三个文件,每个文件名以表名开头,扩展名指出文件类型。
.frm 用于存储表的定义
.MYD 用于存放数据
.MYI 用于存放表索引
在这里插入图片描述

可以看到—–》 Innodb索引与数据放在一起

慢查询/索引

101.数据库索引的实现(B+树介绍、和B树、R树区别)

参考文章:
数据库索引的实现原理 - 辉仔 の专栏 - 博客频道 - CSDN.NET
由浅入深理解数据库中索引的底层实现 | 学步园

102.SQL性能优化

参考文章:
高手详解SQL性能优化十条经验 - 51CTO.COM
Oracle SQL性能优化 - 一江水 - 博客园

103.数据库索引的优缺点以及什么时候数据库索引失效

参考文章:
数据库索引的作用和优点缺点以及索引的11中用法 - 技术与人生 - 博客园
正确高效使用数据库不可不知的索引失效问题 - simplefrog - 博客园
SQL优化避免索引失效 - OPEN 开发经验库
Colin Lau Oracle
哪些情况下索引会失效? - 曾是土木人 - 博客园

评论