-
查询过程:select id from T where k=5(k上有索引)
* 普通索引,查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录,直到碰到第一个不满足 k=5 条件的记录。 * 唯一索引,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。
他们之间的性能差异几乎可忽略,因为查询都是以页为单位读取到内存筛选。
-
更新过程
changebuffer的使用,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,将这些更新操作缓存在 change buffer,下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行 change buffer 中与这个页有关的操作。通过这种方式就能保证这个数据逻辑的正确性。
如果数据页在内存中,数据更新过程 * 普通索引 找到相应位置,判断到没有冲突,插入这个值,语句执行结束; * 唯一索引 找到相应位置,判断到没有冲突,插入这个值,语句执行结束; 如果数据页不在内存中,数据更新过程 * 普通索引 更新记录在 change buffer,语句执行就结束了 * 唯一索引 对于唯一索引来说,需要将数据页读入内存,判断到没有冲突,插入这个值,语句执行结束;
如上述可知,如果没有唯一性校验,尽量使用普通索引,其更新效率更高