在 MySQL(特别是最常用的 InnoDB 存储引擎)中,唯一索引(Unique Index)和普通索引(Normal Index)在数据结构上都是 B+ 树。 它们在查询时的性能差异微乎其微,但在更新(插入、修改、删除)时的性能差异可能非常大。这背后的核心机制在于 InnoDB 的 Change Buffer(写缓冲)。 以下是详细的深度对比分析: --- 一、 查询时的性能差异(几乎无差异) 假设我们要执行查询: 1. 对于唯一索引: B+ 树从根节点层层向下搜索,找到 的记录后,由于索引具有唯一性,引擎知道不可能有下一条相同的记录,因此直接停止检索。 2. 对于普通索引: 查找到 的第一条记录后,因为普通索引允许重复,引擎需要继续向后查找下一条记录,直到遇到第一个不是 的记录为止。 性能对比结论:微乎其微。 原因: InnoDB 的数据是按“数据页”(默认 16KB)为单位读写的。当查找到 的记录时,这条记录所在的数据页大概率已经被加载到了内存(Buffer Pool)中。 对于普通索引来说,多做一次“查找下一条记录”的操作,仅仅是在内存中进行一次指针移动和简单的 CPU...