MySQL和Redis
MySQL
索引
为什么不用B树
对于B树来说每一个节点都要存数MySQL数据,B树从根节点开始就存储数据
哈希表不支持模糊查询,不支持范围查询
最左前缀原则:
索引失效:
模糊查询
or:关键字前后必须都是索引才能走索引,一个不是的话就不能走
联合查询,必须要从首个索引开始
加减乘除
不等于(!=;<>,is not)
is null,is not null 有可能会导致失效,建议设置默认值
索引列使用内置函数也会导致失效
隐式转换
离散读:mrr优化,解决了离散读
MVCC
什么是MVCC
MVCC 是 MySQL 基于自己的回滚机制,为并发场景下的读操作做的读取的一个优化;MVCC 是基于 undo log实现的,它的多版本并发控制是为mysql并发场景下读操作提供的多版本控制,为了达到并发环境下读操作不需要被锁定这样的一个目的来加快mysql的读取
不同事务隔离级别下MVCC的表现
四个隔离级别:
- 读取未提交数据
- 读取已提交数据
- 可重复读数据(默认隔离级别)
- 串行化读数据:这种隔离级别下,只为数据安全
读已提交数据违背了事务的隔离性,事务并不会完全隔离