解释下查询过程?
对于普通索引,查找到第一条满足条件的记录,需要查找下一条,直到碰到不满足。
对于唯一索引,由于唯一性,查找到第一条满足条件的记录,就会停止继续检索。
解释下更新过程?
1.如果内存中有数据页直接更新
2.如果内存中没有数据页,就把更新过程放入Change buffer中。下次查询数据页到了内存中,执行change buffer里的与这个页有关的操作。
解释下更新过程普通索引和唯一索引的操作?
目标数据页不在内存中,对于唯一索引,需要将数据页读入内存,判断有没有冲突,插入这个值;对于普通索引,将更新记录在change buffer,结束。
什么操作能导致数据库成本最高?
把数据从磁盘读到内存里设计随机IO的访问。change buffer减少了随机磁盘访问,更新性能明显提升。
什么场景下使用change buffer最好?
在数据写多读少场景下,数据页写完立刻访问的概率很小,常见的就是账单类,日志类。
在数据写入立刻读场景下,将更新记录在change buffer,因为要访问数据页,立即触发merge过程。
什么场景用普通索引和唯一索引?
两个在查询的性能差别不大,更新操作比较频繁建议使用普通索引。
总结:
本节课学到了普通索引和唯一索引在查询和更新过程的实现方式,查询操作两者相差无几,更新操作使用普通索引效率更高。Innodb的redo log机制保护change buffer在机器掉电的情况下不丢失数据。