mysql数据库读写、索引和优化

Mysql 数据库读和写

读快照,当前读

select * from ** where ** 认为是快照读默认启动只有一条查询的事务,加for update就是当前读,其他事务未提交时当前读会阻塞;update 和delete都是当前读

行锁、表锁、间隙所

行锁:主键列或索引列;主键和唯一索引力度最小最轻量级;普通索引锁满足条件的所有行
表锁:无索引列
间隙锁:发生在普通索引,插入时锁住不存在的列所在的间隙,比如6不存在,存在5,10那么就锁住5-10之间所有间隙,左开右闭
普通索引满足5,10,15,20时,当前读=10的记录时,mysql会锁住10这一条,同时锁住5-10以及10-15的间隙不包含两端,防止中间的insert,主要是防止再插入一条10产生幻读

脏读、不可重复读、幻读

脏读:读到还未提交的数据
不可重复读:两次读同一数据结果不一致,第一次读取更新前的数据,第二次读到更新后的数据
幻读:两次读,第二次读比第一次多读到了新增的数据

事务隔离级别

1.读未提交:即无隔离级别,脏读、不可重复读、幻读均会出现
2.读已提交:不可重复读、幻读会出现
3.可重复读:幻读(mysql可解决,也是mysql默认使用的隔离级别)
4.串行化

mysql索引构成

索引类型分类:B+树和Hash
B+树:所有叶子节点高度不超过1;内容全部存储在叶子节点上,并且叶子结点可以有兄弟关系的指针连接起来叶子节点的内容,方便范围,begin和in类型的查询
Hash:借助内容的Hash值做桶分析;并解决优化Hash冲突的问题,等值查询时有优势

索引形态分类

1.聚簇索引:索引存放内容包含数据,访问效率相对较高;至多只能有一个
2.非聚簇索引:索引存放数据指针,数据另外存储;可以有很多,不建议太多,每次update,insert都会调整B+树的结构

Mysql索引优化

优化原则
1.经常被查询的区分度高的列做索引;建议控制在20-40%的区分度
2.最左原则,索引从左边开始匹配;
在这里插入图片描述
在这里插入图片描述
or查询时建议使用union去使用索引;
3.回盘排序,注意避免,将排序列按照顺序建立对应的联合索引;
4.覆盖索引,查询只包含索引的字段时,能避免费聚簇索引,查询效率更高,如索引列是A,B那么select A,B from时效率更高;
5.小表驱动大表;

索引调优 explain

1.system:仅一行
2.const::主键or唯一键的等值查询
3.eq_ref:主键or唯一键的扫描或关联查询即带了范围
4.ref:非唯一索引的常量等值查询
5.range:索引的范围查询
6.index:索引全查询
7.all:遍历表查询
优化到至少range范围

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值