MySQL散记

本文深入探讨了MySQL的SQL优化技巧,包括选择正确的驱动表、使用exists替代in、合理创建索引以及避免索引失效的场景。此外,详细介绍了事务的四大特性、隔离级别以及MVCC(多版本并发控制)机制,分析了Read View的工作原理,并对MySQL的锁机制进行了讲解,包括行锁、表锁和不同类型的锁。
摘要由CSDN通过智能技术生成

sql优化

  • 把数据量大的表作为驱动表 (straight join)
  • 用exists代替in的子查询
  • 在查询多的表上建立索引(一般结果在20%左右)

​ 1.在经常使用where条件的字段上建立索引

​ 2.在表关联的字段上建立索引

​ 3.在经常使用order by 或 group by的字段建立索引

​ 4.根据情况优先使用唯一索引, 单个索引区分度不大时使用联合索引

  • 索引失效的情况

    1.右模糊匹配时

    2.联合索引使用了只使用了右边的索引

    3.索引字段是int使用str查询时

    4.索引参与运算或使用函数

    5.数据量特别少只有几条(全表查询更快时)

事务和隔离级别

事务的四个特性:原子性、 隔离性、 持久性、 一致性

事务出现的问题

  • 脏写:事务A改了行数据,事务B也改了该行数据,事务A回滚,事务B提交,事务B的数据也被回滚。
  • 脏读:事务A改了行数据,事务B读了事务A修改后的数据,事务A回滚,事务B又读到不同数据。
  • 不可重复读:事务A读行数据,事务B修改了该行数据提交事务,事务A再次读到事务B修改后的数。
  • 幻读:事务A读行数据,事务B增加了行数据提交事务,事务A再次读到事务B修改后的多条数据。

SQL标准的四种隔离级别

  • read uncommitted:只支持快照读(snapshot read)。
  • read committed:解决了脏读,使用mvcc实现。
  • rea
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值