MySQL

1.事务

ACID

  1. 原子性

  2. 隔离性

  3. 一致性

  4. 持久性

事务的隔离级别

读未提交

读已提交

可重复读(MySQL默认的隔离级别,解决了脏读和可重复读的问题,但是没有解决幻读)

串行化(解决了所有问题,但是效率很低)

2.索引

普通索引index

唯一索引

联合索引

全文索引

数据结构为B+树,他是一个多路平衡查找树,它的每层可以有多个数据指针,指向不同的节点, 并且 在每个非叶子节点上只存储了数据指针,叶子节点存储数据指针和 数据 , 并且MySQL 在叶子节点还维护了一个双向链表来更一步的提高查询某个区间内数据的效率。

3.聚簇索引和非聚簇索引

聚簇索引是指数据指针和数据都放到一起,就是叶子节点上的索引,保存了整行数据。 有且只有一个,一般用主键作为聚簇索引

非聚簇索引就是数据和索引是分开存储的,叶子节点上只保留了对应的主键,一般我们自己创建的索引都是非聚簇索引

4.覆盖索引

就是我们查询的结果列 必须在索引上全部命中,所以我们尽量避免使用select * ,避免回表查询

5.超大分页怎么处理

我们一般采用覆盖索引和子查询来进行处理, 在确定查询页数上,通过覆盖索引来查询所需要的字段id , 之后通过子查询来过滤,只需要查询这个id列表中的数据。

6.索引创建原则

在经常使用到搜索的字段上增加索引,提高查询效率

但是索引并不是越多越好,添加索引会影响增删的效率。 并且索引也占用空间。并且维护成本会提高。

7.慢查询

1.定位到慢查询

通过慢查询日志或者SkyWalking 去定位到执行效率比较慢的SQL

2.定位到之后通过 Explain 执行计划命令 来执行当前SQL ,看当前的SQL 有没有命中索引

查看一下有没有索引失效,比如违反了最左前缀法则, 还有就是左模糊查询, 还有队列进行操作,

索引字段不能为null, 有null也会失效。

8. SQL优化的经验

创建表的时候,需要结合字段来选择合适的数据结构, 比如数值的话 有tinyint int bigint 之类的。

如果是字符串的话,可以选择char varchar 或者text 类型

在经常搜索的字段上添加索引

SQL 上有尽量避免使用 select * , 要注意SQL 语句 避免出现索引失效。 用union all 替代union 因为union会多一层过滤,它的效率比较低, 在表关联查询的时候,尽量使用innerjoin,不要使用left join 或者 right join,

如果要使用的话 一定要以小表驱动大表 。

还有一些主从分离,分库分表,垂直拆分,水平拆分。不过这些一般是我们公司的运维人员做的事情。

9.主从同步原理

主从同步的核心就是二进制日志,它的步骤是这样的

  1. 主库在进行事务提交的时候,会把数据变更记录在二进制日志文件Binlog 中。

  2. 从库读取到主库的二进制文件Binlog ,写入到从库中的中继日志Relay Log

  3. 从库重新做中继日志中的事件,将数据同步到自己的库中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MingZhe1008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值