普通索引
普通索引是最基本的索引类型,它是数据库表中的某个列或者某些列上创建的索引结构,目的是为了提高数查询效率
唯一索引
唯一索引是在普通索引的基础上加了唯一性要求
从性能的角度考虑,你选择唯一索引还是普通索引呢?选择的依据是什么呢?
在查询能力上没有差别,主要考虑是对更新性能影响,所以尽量使用普通索引
因为唯一索引更新不能使用change buffer,而普通索引可以使用
change buffer
本质:是一种内存缓存结构,就像是一个临时存放数据修改信息的小仓库,专门针对非主键索引的更新操作目的:减少磁盘io操作,当更新非主键索引时,如果对应的索引不在内存缓冲池内,就把修改信息先放在change buffer中,而不是立刻去磁盘读取索引在修改
redolog
本质:是一种日志文件,用来记录事务对数据的修改操作内容:包含了对数据页的物理修改信息目的:确保事务的持久性。当事务提交的时候,将修改记录到redo log中,如果系统发生故障,系统重启可以根据redo log将未持久化到磁盘的数据重新修改,恢复到事务提交时的状态
change buffer、redolog两者区别
change buffer通过减少不必要的磁盘io来提高性能
redo log通过顺序写入磁盘来优化写入性能
1.当我们更新数据时,如果数据页在内存中就直接更新
2.反之不在,在不影响数据一致性的前提下,innodb会将这些更新操作存在change buffer中,这样就不需要从磁盘中读这个数据页了
3.下次查询访问这个数据页时,将数据页存入内存,然后执行change buffer中有这个页有关的插入
更新语句操作
1.action 1在内存中,直接更新内存
2.action 2不在内存中,就在内存的change buffer区域,记录下“我要插入一行”的信息
3.将这两个动作记录到redo log中
从上可以看出:
1.执行这条更新语句的成本很低,就是写了2处内存和1处磁盘,还是顺序写的