前言
本文主要是偏MySQL本身的底层设计较多,较为枯燥,但是又比较重要,还是静心看吧,哈哈
InnoDB作为MySQL使用最广泛的存储引擎,其重要程度和江湖地位无需再多说什么,那么今天就聊一聊InnoDB的一些关键特性。
另外一说到数据库的特性,肯定就是他的优点,他为啥牛X,为啥速度会快,为啥性能会稳定等等,知道了为什么就能更好的解决问题。
一、插入缓存
听名字就知道是在插入的时候起作用的,既然说到缓存那肯定就涉及到异步,所以最直观的感受就是,插入数据时不直接刷新到磁盘,而是先缓存起来,等到一定阈值时再一起刷盘,实际情况也就是这样的。但是需要注意的是 这里的缓存并不是内存,而是和数据页一样,即物理页的组成部分。
另外对于聚集索引(说到聚集索引一般都说的主键),如果主键是自增的,那么就是顺序插入,性能非常高,一般是没有啥问题的,像分布式系统中雪花算法就是利用这一特性的,所以插入缓存肯定不是为了顺序插入做的优化。
插入缓存主要还是为了解决非聚簇索引的插入速度问题,非聚簇索引的值由于不是递增的,所以在插入的时候就肯定不是顺序的,而是随机的,涉及到随机就涉及到寻址,在大量插入的情况下速度就非常糟糕,那么怎么去解决这个问题呢?相信大家已经知道。
插入缓存使用有两个限制条件:
(1)索引是二级索引或者叫辅助索引
(2)索引不是唯一的
索引为什么是二级索引?是一级索引的话,本身数据库中的行就是按照一级索引排序的。
为什么索引需要唯一?如果是唯一索引那么在插入的时候就需要查数据库是否有相同值得记录,也就失去了意义。
下面部分的内容要不要写还是纠结了一会,不写感觉不完整,写了感觉插入缓存章节文字太多,进一步导致整篇文章的文字过多,