ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

主键索引为什么要有序

主键索引为什么要有序 数据库索引是什么 B树B树是如何工作的按排序顺序存储数据如果无序排序/随机uuid会怎么样 页分裂碎片化写入性能下降空间浪费具体好处快速查找(二分查找)范围查询(between 、)排序顺序插入(页填充)聚簇索引中数据行按主键顺序在磁盘上物理存储最根本的原因是索引的数据结构是B树还有聚簇索引的物理存储。需要从四个方面看核心机制(B树)插入性能(页分裂)查询性能(范围/排序)存储空间(碎片)因为B树需要有序才能工作有序是二分查找和范围查找的前提其次主键是聚簇索引聚簇索引中表数据按照主键物理存储。如果有序数据追加到末尾只需填满页。如果无序插入位置随机导致页分裂大量磁盘I/O和碎片化。详细说明写入性能无序插入新插入的行可能落在已满的旧数据页中间导致innodb必须页分裂(申请新页移动数据)来腾出空间这不仅消耗大量IO还会产生磁盘碎片。而有序主键只会写满旧页再开新页写入速度极快。辅助索引的回表效率辅助索引叶子节点存储主键主键有序那么辅助索引查找到的数据在物理上紧密相邻回表时利用磁盘预读特性一次性加载相邻行大幅减少随机io。高效的范围查询因为有序所以范围查找能根据链表顺序扫描。无序就会退化为几乎全表扫描
返回列表