MySQL总结

MySQL总结

MySQL B+树

1.InnDB以页的方式进行存储,如果超过默认的16KB则生成下一页,也就是增加树的一个磁盘块,这个大小可以设置;

2.B树的叶子节点只有数据,而非叶子节点既有数据又有指向对应节点的指针;

3.B+树的叶子节点只有数据,而非叶子节点只有指针

为什么这样设计?

由于B树的非叶子节点还有数据,这就占用了每个磁盘块的内存,也就导致更多的非叶子节点,增加了树的高度,而B+树的非叶子节点只有指针就可以存储更多的指针,这个时候就减少了树的高度

索引

1.索引分为普通索引,唯一索引,主键索引

普通索引:没有限制,允许插入重复值和空值

唯一索引:索引必须是唯一的

主键索引:作为主键的索引

2.当你创建一个索引时,其实也就是创建了一个B+树,后续的查找也是通过B+树进行查找的,但是B+树的叶子节点只有id和此索引数据,后续查询就会出现回表查询的情况;

3.回表查询就是当查询的这个字段是索引字段时,而我们需要的不仅仅是该索引数据和Id时,最后还是会向主键索引再次查找一边;

怎么解决这个问题呢?

我们可以将这个索引字段和其他我们需要的字段做关联,B+树的数据中就会有我们需要的数据了,只需要查询一次就可以得到结果了;

4.覆盖索引:将我们需要的结果字段和索引字段做关联,这个时候通过索引查询的数据就只需要查询一遍了;

5.索引不是越多越好,毕竟索引占内存,而且在插入数据后B+树会变,写入数据会变慢.总结来说就是1.空间换时间 2.牺牲写操作,提示读操作

6.索引注意事项:1.避免更改索引数据 2.经常更新的表避免创建索引 3.几万级别下的表最好不要创建索引 4.避免在相同值多的列上创建索引

页、缓冲池和各种日志

1.InnoDB的数据页大小为16k

2.数据库中的缓存池会将访问的页数据放到缓存池中,以供下次读取,其中缓存池的大小可以设置,默认是128M

3.当我们修改了缓存页中的数据的时候,就会有脏页的情况,数据中专门的链串联所有的脏页"flush链",一秒刷新一次将脏页数据写到磁盘中

4.脏页刷新时机: 1.磁盘的redo log日志文件写满时 2.内存不足时 3.系统空闲时 4.MySQL正常关闭时

5.bin-log 主要用于数据备份 undo-log主要用于事务回滚 redo-log主要用于用户服务器宕机恢复

事务隔离级别

6.事务的隔离级别:读未提交,读已提交,可重复读,串行化

可重复读:当select 数据时没有提交事务再次select 数据不会改变结果,原理是在读取数据的时候会复制一份数据以作后续读取

串行化:当A读取此数据时,B对这行数据的任何操作都会被阻塞

数据库默认开启可重复读

select-for-update 和锁

7.select for uodate锁分为行锁和表锁,

行锁:其中操作的数据是带有索引的话会锁住该行,也就是行锁;

表锁:操作的数据没有索引,数据库会去检索全表,这个时候会执行表锁;

锁的根本是锁索引的B+树

慢查询和执行计划 typ 值

8.慢查询:当查询的时间超过一定的时间没有返回结果的时候,该SQL语句会被记录到slow_query_log日志中,不过慢查询日志是默认不开启的,需要启动时进行配置

9.当我们在执行的查询sql语句前加上explain,结果会显示执行的type值,通过type值可以判断sql语句的执行快慢,下面从快到慢

1.const

2.eq_ref

3.ref

4.fulltext

5.ref_or_null

6.index_merge

7.unique_subquery

8.index_subquery

9.range

10.index

11.all

SQL 语句优化

8.SQL语句优化策略

1.避免 select *

2.在where 中尽量使用等值判断

3.尽量避免全表扫描

4.用UNION来代替OR

5.like 语句避免前置百分号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值