mysql进阶整理

  1. 事务

1.1 事务简介:

1.2 事务的4大特写ACID:

1.3 并发事务问题:

附加描述:

  • 不可重复读:在同一个事务里面,同一条查询语句查到结果不一样,默认情况下,应该同一事务中查询的结果是一致的。

  • 幻读:(id没有索引,有索引会重新间隙锁,也可防止幻读)有两个事务,比如,A事务查询并没有发现id=3的数据,B事务插入id=3的数据并提交,这个时候A事务插入id=3数据,发现无法插入,于是又去查询id=3的数据,结果还是没有查到。这就是幻读。

  • 串行读可解决幻读:比如启动AB两个事务,A事务去查询id=3数据,没有查到,B事务去插入id=3的数据,将会无法插入,只有A事务结束后,B事务才能去执行插入操作。串行读可以理解为锁。

1.4 事务的隔离级别:

  1. 存储引擎

2.1 mysql体系结构:

2.2 存储引擎的简介:

show engines 查看支持的mysql引擎

2.2.1 InnoDB引擎特点:

2.2.2 MyISAM引擎的特点:

2.2.3 Memory引擎的特点:

2.2.4 存储引擎的选择:

  1. 索引

3.1 索引介绍:

3.2 索引类型:

3.3 各种树的结构:

3.3.1 二叉树

3.3.2 B-tree

附加解释:

  • 5个指针是4个key中,key与key之间的范围

  • B-tree,每个节点最多4个key,如果达到5个key,将会把中间那个key向上分裂

3.3.3 B+tree

附加解释:

  • B+tree所有的数据都在叶子节点,非叶子结点只作为索引作用

  • 阶可以自己选择,当阶满了,中间的key向上分裂,同时所有的key都在叶子节点可以找到

  • 叶子节点是单向链表

mysql中的B+tree:

附加解释:叶子节点是双向链表

3.3.4 hash索引

3.4 索引面试题:

3.5 索引分类:

3.5.1 聚集索引(聚簇索引)和二级索引:

附加解释:

  • 二级索引会出现回文查询,回表查询指定就是:二级索引找到对应row的id,再到聚集索引中进行查找row

select * from table where name = “arm”;的查找过程

3.5.2 面试思考题:

查找id的效率高。查找name还得通过回表查询,才能查到具体的row

第二题、

3.6 索引语法:

3.7 sql性能分析:

3.8 索引的使用原则(索引失效的原因):

附加解释:

  • abc为联合索引, abc完整索引(都出现的时候和顺序无关),ab损失c索引,ac损失bc索引,a损失bc索引,bc无索引,c、b都是无索引

附加解释:执行以上sql,第一条损失status这个索引,第二条可以使用完整的联合索引(范围查询的时候使用>= 、<= 可以避免索引损失)

附加解释:第一条sql不会导致索引失效,剩下两条会导致

3.9 sql提示

附加解释:use index--建议使用的索引,ignore index--不使用的索引,force index--必须使用的索引

3.10 覆盖索引

3.11 前缀索引

查询流程

附加解释:前缀索引设定后,可能索引不是唯一的,所以当回表查询后,还得比较email是否是一致的,如果不一致,辅助索引继续查找下一位继续回表。

3.12 单列、联合索引

3.12.1 联合索引的情况

3.13 索引设计原则

4. sql优化

4.1 插入优化

4.2 主键优化

4.2.1 主键顺序插入

4.2.2 乱序插入

附加解释:乱序插入的时候,如果都是满的,会找到对应的页的中间位置提取到另一个新页中,然后再重新排序。

4.2.3 页合并

4.2.4 主键设计原则

4.3 order by 优化

order by优化总结:

4.4 group by优化

4.5 limit优化

4.6 count优化

4.7 update优化

附加解释:

  • mysql中update、delete、insert会加入行级排他锁;

  • 共享锁(s锁),读锁,只可读,不可修改数据。开启事务的时候,会开启;

  • 排他锁(x锁),写锁,只给一个事务使用,串行化这个隔离级别就是就是用了排他锁;

5. 锁

5.1 锁的介绍

5.2 mysql锁

5.2.1 mysql锁分类

5.2.2 全局锁

  • 语法

  • 全局锁备份可能存在的问题与解决:

5.2.3 表级锁

  • 表锁

  • 元数据锁

附加解释:可以理解为开启事务后,操控该表都会触发读/写锁,但这些都是共享锁,不会发生阻塞(要>=可重复读的隔离级别)。如果要alter表结构,则会触发exclusive排他锁,该锁和其他锁都为互斥,如果有其他锁存在将会发生阻塞,等待其他锁的事务提交完成后,才会执行。

  • 意向锁

附加解释:当执行update的时候,会对行进行行锁,如果这个时候另外一个事务过来要上一个表锁,将需要全文查看当前表的行锁情况(性能不佳);于是,在执行update的时候,除了发生行数锁,还要意向锁,这样另外一个事务如果要上表锁的时候,只需看意向锁即可(提高了上锁性能)

5.2.4 行级锁

  • 行锁

自动添加的锁

  • 间隙锁/临键锁

附加解释:

①第1条解释,id为唯一索引,比如对id=17进行update,因为没有找到,所以自动在16-18之间增加一个间隙锁,其他事务在这个id范围内也插入不进来。

②第2条的解释,会生成两个间隙锁,比如查找age为18 select * from table wehre id = 18 lock in share mode(普通查询不会自动加锁)。为了防止幻读,在16-18、18-29之间,加入了间隙锁。

③第3条解释,会生成临建锁,比如select * from table where id >= 29 lock in share mode。对29加行锁,29-98之间加临建锁,98-+无穷之间加临建锁。

6. InnoDB存储引擎

6.1 逻辑存储结构

6.2 内存结构

6.2.1 缓冲池

6.2.2 更改缓冲区

6.2.3 自适应hash索引

6.2.4 日志缓冲区

6.3 磁盘结构

6.4 后台线程

6.5 事务原理

6.5.1 redo log

6.5.2 undo log

6.6 MVCC

6.6.1 隐藏字段

6.6.2 MVCC undo log

6.6.3 readView

附加解释:在读已提交的隔离级别下

①第一个查询,快照查询的是事务2执行提交后的结果

②第二个查询,快照查询的说事务3执行提交后的结果

附加解释:可重复读隔离级别的时候,只会复用第一次快照查询的结果

7.mysql主从结构

7.1 概念

7.2 原理

总的来说,就是主库做的操作会记录到binlog的二进制文件里,然后从库去读取binlog到relaylog这个重做日志上面,然后进行重做,实现主从复制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 进阶实战》是一本探讨MySQL数据库高级应用和实战技巧的书籍。MySQL是一种广泛使用的开源关系型数据库管理系统,在Web开发和数据分析等领域有着重要的应用。 《MySQL 进阶实战》将帮助读者理解MySQL的高级功能和最佳实践,进一步优化数据库的性能和稳定性。本书主要内容包括: 1. 高级查询优化:介绍如何使用索引、列存储和分区技术来提高查询性能,避免慢查询和死锁等问题。 2. 数据库设计与架构:详细讲解如何设计合理的数据库模型,包括表关系、数据类型和字段命名规范,以及应对高并发和大数据量的应用场景。 3. 高可用与备份恢复:介绍如何设置主从复制、集群和故障切换,确保数据库的高可用性和数据安全。 4. 性能调优与监控:介绍如何使用工具和技术调优MySQL数据库的性能,包括查询优化、缓存设置和资源管理等方面。 5. 安全与权限管理:详细讲解如何设置数据库的用户权限、访问控制和加密保护,防止非法访问和数据泄露。 6. MySQL新特性与实践:介绍新版本MySQL的特性和改进,以及如何应用到实际项目中。 《MySQL 进阶实战》不仅适合已经具有一定MySQL基础知识的读者,也可以作为MySQL数据库开发和运维人员的参考手册。通过读此书,读者将能够更深入地了解和应用MySQL数据库,在实际项目中提高开发和管理效率,提升数据库的性能和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值