MySQL性能优化学习笔记

2020-03-07  本文已影响0人  YyYy_G

1.索引是怎么实现的吗?

1.索引是什么,索引是由什么来实现的?

索引是为了加速对表中数据的检索而创建的一种分散存储的数据结构,索引是有存储引擎来实现的。

2.为什么用索引

索引能极大的减少存储引擎需要扫描的数据量;索引可以把随机IO变成顺序IO;索引可以帮助我们在进行分组、排序的时候,避免使用临时表

3.索引为什么使用B+Tree

动态展示数据结构的网站: https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

首先,我们会想到用二叉树来存储数据,但是,二叉树会造成整个树的深度过大,通过根节点查找数据,会多走很多步。然后就会考虑平衡二叉树,但是平衡二叉树每个节点只有两个子节点,所以树的深度过大,而且每个磁盘块保存的数据量太小了。而B树就很好的解决了这两个问题(mysql使用的B+树原理跟B树差不多)。

B+树和B树的区别是:

B+树对比B树有哪些优势:

4.B+树在存储引擎中的体现形式
5.索引知识补充

2.

1.mysql的体系结及查询流程

客户端->连接池(Connection Poll) ->sql InterFace -> 解析器 -> 优化器 ->执行器 ->存储引擎

2.mysql的存储引擎(插拔式)
3.mysql查询优化详解
4.如何定位慢sql

3. InnoDB事务/锁

1.事务
2.事务并发造成哪些问题
3.针对这些问题定义了四种隔离级别

对于以上几种隔离级别,并发能力越来越低 对于InnoDB引擎,在可重复读的隔离级别下,解决了幻读的问题

4.隔离级别是通过什么实现的

通过锁和MVCC来实现

5.锁

锁是用户管理不同事务对共享资源的并发访问

表锁和行锁的区别:

InnoDB支持行锁和表锁(另类的行锁)

InnoDB的行锁是通过给索引的索引项加锁来实现的,只有通过索引条件进行数据检索,InnoDB才会使用行锁,否则 InnoDB将使用表锁(锁住索引的所有记录),如:非主键索引被锁住,除了这个索引被锁,其对应的主键也会被锁

锁的类型:

意向锁是InnoDB数据操作前自动加上去的,不需要用户干预,其意义:当事务想去锁表的时候,可以先判断意向锁是否存在,存在则可快速返回该表不能缩表,如果,一个事务中一个数据行加了排他锁,另一个事务中的更新条件没有索引(这时候就会锁表),这时候这个事务就会别锁住

6.脏读/不可重复读/幻读的问题怎么解决
7.死锁的介绍及避免

一个事务中持有A的锁,等待B的锁,另一个事务中持有B的锁,等待A的锁,就造成死锁

如何避免:

4.MVCC(多版本并发控制)

1.MVCC是什么

并发访问(读或者写)数据库时,对正在事务内处理的数据做多版本的管理,以达到永用来避免写操作的堵塞,从而引发读操作的并发问题

2.建表或作插入、修改、查找操作时,做了什么
3.undo log是什么

是指事务开始之前,在操作任何数据之前,首先将需要操作的数据备份到一个地方(undo Log).

4.undo log 怎么实现事务的原子性

事务执行过程中如果出现了错误或者用户执行了rollback,mysql可以通过undo Log的备份将数据恢复到事务开始之前的状态

5.undo Log 怎么实现多版本并发控制

事务未提交之前,Undo Log保存了未提交之前的版本数据,Undo 中的数据可以作为数据旧版本快照,供其他并发事务进行快照读

6.当前读、快照读
7.redo log

redo log指事务中操作的任何数据,将最新的数据备份到一个地方(Redo Log)

redo log 的持久:不是随着事务的提交而写入的,在事务执行过程中,便开始写入,

redo log是为了实现事务的持久性而出现的产物:防止在发生故障的时间点,尚有脏读页未写进磁盘,在重启mysql的时候根据redo log进行重做,从而达到事务中未入磁盘数据进入持久化这一特性

一旦事务提交并且持久化落盘之后,此时redo log中对应的事务数据记录就失去了意义,所以redo log 是循环写入的,可以理解成一个环形,头部(写入的的位置)快要追上尾部(持久化到磁盘的位置)时,就全力来持久化磁盘,给写入redo log 留下空间

8.redo buffer 通过什么策略持久化到redo log

一般有三种策略,Innodb_flush_log_at_trx_commit设置为0、1、2

5.配置优化

1.MySQL服务器参数类型

基于作用域,可以分为

注意:

2.如何找到默认配置文件

可以通过 mysql --help | grep -A 1 'Default options are read from the following files in the given order'来找到

有可能找多多个配置文件,后面加载的配置文件会把前面加载的配置文件覆盖掉

3.全局配置文件哪些需要注意

6.数据库设计

1.三大范式

但是不一定非要完全三大范式来做,因为,如果完全满足第一范式,那么造成表有太多的列,完全满足第三范式,就造成过多的表关联

上一篇 下一篇

猜你喜欢

热点阅读