-
查询过程:select id from T where k=5(k上有索引)
* 普通索引,查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录,直到碰到第一个不满足 k=5 条件的记录。 * 唯一索引,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。他们之间的性能差异几乎可忽略,因为查询都是以页为单位读取到内存筛选。
-
更新过程
changebuffer的使用,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,将这些更新操作缓存在 change buffer,下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行 change buffer 中与这个页有关的操作。通过这种方式就能保证这个数据逻辑的正确性。
如果数据页在内存中,数据更新过程 * 普通索引 找到相应位置,判断到没有冲突,插入这个值,语句执行结束; * 唯一索引 找到相应位置,判断到没有冲突,插入这个值,语句执行结束; 如果数据页不在内存中,数据更新过程 * 普通索引 更新记录在 change buffer,语句执行就结束了 * 唯一索引 对于唯一索引来说,需要将数据页读入内存,判断到没有冲突,插入这个值,语句执行结束;如上述可知,如果没有唯一性校验,尽量使用普通索引,其更新效率更高
唯一索引和普通索引如何抉择
最新推荐文章于 2025-11-24 20:48:20 发布
本文探讨了普通索引和唯一索引在查询和更新过程中的差异。在查询时,两者性能差异微乎其微,主要体现在数据页的读取。而在更新过程中,普通索引的更新通常更高效,尤其是当无需进行唯一性校验时,可以利用change buffer减少内存读取。因此,若无唯一性约束,推荐使用普通索引以提高数据更新速度。
769

被折叠的 条评论
为什么被折叠?



