一、数据库与文件系统的区别
数据库与文件系统的区别
数据库系统:数据库系统是按照数据结构来组织、存储、管理数据的仓库
Unit | 文件系统 | 数据库系统 | 数据库功能 |
---|---|---|---|
数据冗余度 | 数据冗余导致存储和访问开销大 | 减少数据冗余 | 数据共享(通过外键将很多行的共同属性抽取成一个新表的一行) |
数据访问 | 慢 | 快 | |
数据孤立 | 数据分散在不同文件,不同文件存储方式可能不同 | 数据共享 | 数据独立性 |
完整性 | 涉及到不同的文件 | 有数据安全性和完整性保证 | 统一数据管理 |
原子性 | 难以恢复 | 多用户并行操作 | 数据字典 |
并发访问异常 | 并发访问执行操作会互相影响 | 易于使用 | 故障恢复 |
数据库相较于Excel文件的优势:
- 存储大量数据,Excel文件存储大量数据时执行操作容易卡顿甚至崩溃
- 允许多人同时使用,Excel文件打开之后就会加上锁不能多人写入文件
二、慢查询
1、问题描述
数据量大,线上某些sql语句执行的特别慢,优化找不到思路
2、Mysql性能
Mysql作为关系型数据库,大量数据存储在磁盘上,所以磁盘IO次数成为了评价Mysql性能的指标
3、优化思路
- 检查sql查询条件是否用了索引
- 检查索引用的是否合适
- 检查sql查询条件是否正确找到索引
4、思考
- 为什么加了索引,sql时间从s降到了ms?
5、索引详解
① 简单描述
索引类似一本书的目录页
② 官方文档
索引是帮助Mysql高效获取数据的排好序的数据结构
常见索引数据结构:
-
二叉排序树
-
红黑树
-
Hash表
-
B树
select * from table_name where table_name.title=3
id | title | info |
---|---|---|
1 | a | lalala |
2 | b | balabala |
3 | a | 2333333 |
…. | … | … |
999 | ada | 66666666 |
1)当没有索引时
数据库会从第一行依次读到最后一行,每次核对title字段是否符合条件
2)当有索引时
-
二叉排序树
-
当大体平衡时,查找次数会相对较少
-
当出现单只树情况(平衡因子差别很大时),查找次数会特别大
-
-
红黑树
- 平衡二叉树追求完全平衡而进行的大量平衡调整降低了平衡二叉树的性能
- 红黑树追求弱平衡,减少了平衡调整的次数,每次插入只需要看parent节点是不是red来判断需不需要调整
- 而在Mysql大规模数据存储的情况下,红黑树作为二叉树往往由于树的深度过大造成大量的磁盘IO,造成性能低下
-
Hash表
- 理想情况下,可以通过一次Hash计算找到目标的存储地址
- 但是hash算法会有hash冲突,需要解决冲突
- Hash性能很好,但是不支持范围查找
-
B树
- B-树和B+树每层节点数目非常多,且为m叉树,因此层数很少,降低了磁盘IO次数
- B-树每一个节点中既存了索引也存储了data,导致读取每层节点时的数据量增加,增加了磁盘IO,且不利于范围查找
- B+树叶子节点存储所有索引和data,非叶子节点仅索引,且所有叶子节点之间有指针连接,且从左到右递增。所以读取叶子节点就可以获取全部数据,便于范围查找