MySQL

1,读音

2,杂谈

mysql默认连接数:151
show variables like ‘max_connections’;
mysql通讯方式:半双工

查询sql执行流程:
1,建立连接
2,发送语句
3,解析:服务端进行词法分析和语法分析,得到解析树
4,预处理:服务端进行语义分析,得到解析树
5,查询优化器:得到执行计划
6,查询执行引擎:执行执行计划
7,返回结果

聚集索引:数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。

1,主键索引
2,不包含null的唯一索引
3,隐藏字段:rowid

列的离散度:count(distinct(column_name))/count(*)

索引最左前缀匹配

覆盖索引:需要查询的列已经包含在了二级索引里面

索引条件下推:

平衡二叉树:解决了二叉树变成斜树,不够平衡的问题
b树:降低树的高度,减少io次数
b+树:只会在叶子节点存储数据,并且叶子节点上有排序指针,提升了范围查找和排序的效率,进一步节省了根节点和支节点的存储空间,io次数稳定

创建索引:
1,where判断,order排序,join的on字段上创建索引
2,离散度低的列不要创建索引
3,频繁更新的列不要创建索引
4,联合索引把离散性高的列放前面
5,索引的个数不要过多
6,长列使用前缀索引,count(distinct left(column_name, length))/count(*)
7,建议使用有序字段作为主键,随机字段插入时会造成b+树频繁的分裂和合并

什么时候用不到索引:
1,索引列上使用函数,表达式
2,字符串不加引号,出现隐式转换
3,like条件中前面带%
4,负向查询可能能用到索引:优化器会根据开销决定是否使用索引

事务:
1,原子性:失败时通过undo log回滚
2,一致性:数据是一致的,符合规则的
3,隔离性:多个事务不会相互干扰
4,持久性:通过redo log和double write(双写缓冲)来实现

事务的锁在事务提交或回滚的时候会释放,在会话结束的时候也会释放。

事务并发的三大问题:
1,脏读:读未提交,读到的是脏数据
2,不可重复读:读已提交(update/delete),两次读取结果不一致
3,幻读:读已提交(insert),两次读取的数据数量不一致

事务隔离级别:
RU:read uncommitted
RC:read committed
RR:repeatable read
串行化:serializable

InnoDB中,RR级别解决了三大问题:
1,基于锁的并发控制:LBCC
2,MVCC

MVCC:
DB_TRX_ID:插入或更新行的最后一个事务的事务id,事务id是自动递增的(创建版本)
DB_ROLL_PTR:回滚指针(删除版本)

只能读取开启事务前的数据(创建版本小于当前事务版本)
开启事务之前的数据,即使在开启事务后被删除(删除版本大于当前事务版本),依然可以查询到

LBCC(锁):基本类型:
共享锁(s锁,读锁):select … lock in share mode;
排他锁(x锁,读锁):update/insert/delete …; select … for update;
意向共享锁(is锁):
意向排他锁(ix锁):

InnoDB的锁是锁的索引

记录锁:唯一性索引等值查询,精准匹配到数据的是时候
间隙锁:没有命中记录,锁住记录不存在的区间,阻塞插入
临键锁:范围查询,锁住第一条记录所在区间和最后一条记录的下一个区间

对于RR隔离级别:
普通select通过mvcc实现
加锁的操作(update/delete/insert/select…for update/select…in share mode)通过记录锁,间隙锁和临建锁实现

系统的优化数据库:
1,数据库连接:服务端最大连接数,连接超时时间,客户端连接池
2,系统架构:使用第三方缓存
3,。。。
4,explain 中的type最好到ref级别,尽量到range级别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值