普通索引和唯一索引,应该怎么选择?
在innodb中每个页的大小为16kb,读一条记录时以页为单位读入内存。
普通索引查找数据的时候,会将符合条件的都找出来
唯一索引,只要找到第一条符合条件的,就会立刻返回,不再继续找了,因为唯一的约束已经事先确保了只有一条符合条件。
但是对查询来说,以上两种 如果数据都只有1条,时间是相似的,微乎其微。
change buffer
当更新一个数据页的时候,如果数据页在内存中就直接更新,如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,innoDB会将这些更新操作缓存到change buffer中,这样就不需要从磁盘中读入这个数据页了,下次遇到这个数据页读到内存的时候,就把changebuffer中的更新merege到 这个数据页上面。
注意:虽然是叫changeBuffer 但是这个也是会持久化到硬盘中的。 merege操作除了在访问数据页的时候会触发,在系统后台也会定期merege ,在数据库正常关闭(shutdown)的过程中,也会执行merge操作。
这个优化 把更新操作在内存中进行,减少磁盘的读写,可以极大提高性能。
changerbuffer不能被唯一索引用到,因为唯一索引每次更新都要判断这个操作是否违反唯一性约束,比如说要插入某个数据,要先判断其是否已经存在,那就必须要将这个数据页读入内存中才知道,既然都读入到内存中,那么直接更新就好了,不需要changebuffer。 因此这个只能被普通索引用到。
那么对于插入来说,
1.如果目标数据页在内存中
普通索引
先找到数据位置,然后插入<