唯一索引or普通索引?阿里强制唯一索引?
1、 唯一索引和普通索引区别
先谈谈两者在查询操作上的区别,假设我们对一张User表建立mobile字段的索引。
1. 查询操作
若执行查询语句select * from user where mobile=123456789;
唯一索引由于具有唯一性,当查询时将唯一字段作为条件时,查询到一个记录后将立即返回。
普通索引由于不保证唯一性,直到遇见不符合条件的才返回。
但实际上普通索引与唯一索引在性能上是微乎其微的,因为在查询语句的主要时间是花在了索引磁盘块的读取和数据页的读取上,两者读取磁盘块的个数基本一致。基本一致就是指特殊情况普通索引可能会多一个IO,即该记录正好在数据页的最后一个,那么还会读取下一个数据页(概率极低)。
所以得出的结论是唯一索引跟普通索引在查询上性能相当。(PS:该结论先打个问号???)
2.更新操作
在聊更新操作之前先谈谈Change Buffer。MySQL的数据数据存储是包含两个部分的:磁盘和内存。在内存中有一个内存缓冲池,缓存数据页和索引页以提高读效率,Change Buffer以提高写效率。
Change Buffer用于当索引页不在缓冲池中时,对数据页进行写操作时,并不会立即将磁盘加载到缓冲池然后写入数据,而是仅仅记录缓冲变更信息&#