MYSQL学习总结

  • 事务

  • InnoDB 的行数据有多个版本,每个数据版本有自己的 row trx_id,每个事务或者语句有自己的一致性视图。普通查询语句是一致性读,一致性读会根据 row trx_id 和一致性视图确定数据版本的可见性。
    • 对于可重复读,查询只承认在事务启动前就已经提交完成的数据;
    • 对于读提交,查询只承认在语句启动前就已经提交完成的数据;
  • 而当前读,总是读取已经提交完成的最新版本。
  • 需要区分行锁、MDL 锁和表锁的区别。对 InnoDB 表更新一行,可能过了 MDL 关,却被挡在行锁阶段
  • 索引

  • 唯一索引和普通索引的选择

  • change buffer
  • 对于查询过程,二者效率上的区别不大
  • 对于更新过程
    • 若当前需要更新的页在内存中,那么二者却别也不大,直接更新内存即可,唯一索引比普通索引只多一步判断是否冲突的操作
    • 若当前若当前需要更新的页不在内存中
      • 对于唯一索引来说,需要将数据页读入内存,判断到没有冲突,插入这个值,语句执行结束
      • 对于普通索引来说,则是将更新记录在 change buffer,语句执行就结束了
  • 实践意义:
    • 如果碰上了大量插入数据慢、内存命中率低的时候,可以给你多提供一个排查思路。即是否是使用了唯一索引,因为每次都要将判断是否有冲突,就需要将磁盘上的数据读入内存中,而如果是普通索引,直接将插入操作记录在change buffer中即可
    • 然后,在一些“归档库”的场景,你是可以考虑使用普通索引的。比如,线上数据只需要保留半年,然后历史数据保存在归档库。这时候,归档数据已经是确保没有唯一键冲突了。要提高归档效率,可以考虑把表里面的唯一索引改成普通索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值