MySQL
2020-11-04 14:27:08 0 举报
AI智能生成
mysql
作者其他创作
大纲/内容
MySQL
存储引擎
InnoDB
支持事务
支持行级锁
支持在线热备份
MyISAM
不支持事务
表级锁
支持空间数据索引
InnoDB和MyISAM比较
事务:Innodb支持事务,MyISAM不支持事务
锁:Innodb支持行级锁,MyISAM只支持表级锁
外键:Innodb支持外键
Innodb支持在线热备份
MyISAM支持空间索引
索引
B+树原理
数据结构
B+树是B树的一种结构变形,它是基于B+树和叶子节点顺序访问指针进行实现,通常用于数据库和操作系统的系统中
分支主题
B+树有两种类型的节点:内部节点(也称索引节点)和叶子节点,内部节点就是非叶子节点,内部节点不存储数据,只存储索引,数据都存储在叶子节点上
内部节点中的key都按照从小到大的顺序排列,对于内部节点中的一个key,左子树中的所有key都小于它,右子树中的key都大于等于它,叶子节点中的记录也按照key的大小进行排序
每个叶子节点都存有相邻叶子节点的指针
操作
查找
插入
删除
常见的树特性
AVL树
平衡二叉树,高度平衡,相比于红黑树查找更快,删除略慢,rebalance概率更高
红黑树
近似平衡的,rebalance概率更低
B/B+树
多路查找树,出度高,磁盘I/O低,一般用于数据库系统中
B+树与红黑树的比较
磁盘I/O次数低
B+树一个节点可以存储多个元素,相对于完全平衡二叉树整体的树高度降低了,磁盘的I/O效率提高了
磁盘预读特性
B+树与B树的比较
B+树的磁盘I/O更低
遍历效率高
B+树相对于B树冗余了一下非叶子结点,提高了范围查询效率
MySQL索引
B+树索引
二分查找,查找速度更快
B+树有序,排序,分组速度快
聚簇索引
叶子节点的数据域记录着完整的数据记录
辅助索引
叶子节点的数据域记录着主键的值,如果查询的不是索引构成列或者主键,需要回表
哈希索引
快速精准查询,但是不支持范围查询
适合场景:等值查询场景,例如Redis、Memcached等这些NoSQL中间件
哈希表
全文索引
空间数据索引
索引优化
独立的列
索引不能是表达式的一部分,也不能是函数的参数
多列索引
在需使用多个列作为查询条件是,使用多列联合索引比使用单列索引性能更好
索引列的顺序
选择行最强的索引列放到最前边
索引的选择性:不重复的索引值和记录总数的比值
前缀索引
对于BLOG、TEXT和VARCHAR类型的列,必须使用前缀索引,只索引开始的部分字符
前缀索引的选取需要根据索引选择性来确定
覆盖索引
定义:索引包含所有需要查询字段的值
优点
索引通常远小于数据的大小,只读取索引远能大大减少数据访问量
无需回表
索引的优点
索引的使用条件
查询性能优化
使用Explain分析select语句
select_type
SIMPLE简单查询
UNION联合查询
SUBQUERY子查询
table
查询的表
type
system
the table has only one row.this is a special case of the const join type
const
只有一条查询结果&主键/唯一索引
eq_ref
非唯一索引
range
使用索引进行范围查询时
index
查询字段是索引的一部分,覆盖索引
使用主键排序
all
全表扫描
possible_type
可选择的索引
key
实际使用的索引
rows
扫描的行数
优化数据访问
减少请求的数量
只查询到必要的列,例如将*替换为要查询的列
只返回必要的行,使用Limit限制返回的行数
缓存重复查询的数据,例如使用Redis缓存用户登录数据
减少数据库扫描的行数
使用索引来覆盖查询
重构查询方式
做分页,分批查询
事务
ACID
Atomicity
事务不可分割的最小单元,所有操作要么全部成功,要么全部失败
Consistancy
数据库在执行事务之后前后要保持一致性状态,在一致性状态下,所有事务对同一个数据的读取结果都是相同的
Isolation
一个事务所做的修改在最终提交前,对其他事物是不可见得
Durabillity
一旦事务提交,其所做的修改将永远保存到数据库当中
ACID之间的关系
隔离级别
READ UNCOMMITED
READ COMMITED
REPEATABLE READ
SEARALIZABLE
锁
锁类型
共享锁(S Lock),允许事务读一行数据
排他锁(X Lock),允许事务删除或更新一行数据
意向共享锁(IS Lock),事务想要获得一张表中某几行的共享锁
意向排他锁(IX Lock),事务想要获得一张表中某几行的排他锁
MVCC多版本并发控制机制
锁算法
Record Lock
单个行记录上的锁
Gap Lock
间隙所,锁定一个范围,但是不包括记录本身
Next-Key Lock
锁问题
脏读
不可重复度
幻读
丢失更新
分库分表
水平切分
垂直切分
Sharding策略
哈希取模
范围
映射表
Sharding存在的问题
事务问题
链接
唯一性
复制
主从复制
读写分离
Search Json Value
JSON_CONTAINS
JSON_CONTAINS_PATH
column->path
column->>path
the ->>operator in addition unquotes the extracted result
关系数据库理论
数据依赖
异常
范式
ER图
实体的三种关系
表示出现多次的关系
联系的多向性
表示子类
0 条评论
下一页