MySQL 聚集索引和二级索引

聚集索引和二级索引每张使用 InnoDB 作为存储引擎的表都有一个特殊的索引称为聚集索引 , 它保存着每一行的数据 , 通常 , 聚集索引就是主键索引 。为了得到更高效的查询、插入以及其他的数据库操作的性能 , 你必须理解 InnoDB 引擎是如何使用聚集索引来优化常见的查找和 DML 操作 。

  • 如果你的表定义了一个主键 , InnoDB 就使用它作为聚集索引 。因此 , 尽可能的为你的表定义一个主键 , 如果实在没有一个数据列是唯一且非空的可以作为主键列 , 建议添加一个自动递增列作为主键列 。
  • 如果你的表没有定义主键 , InnoDB 会选择第一个唯一非空索引来作为聚集索引 。
  • 如果你的表既没有主键 , 又没有合适的唯一索引 , InnoDB 内部会生成一个隐式聚集索引 —— GEN_CLUST_INDEX , 该索引建立在由 rowid 组成的合成列上 。数据行根据 InnoDB 分配的 rowid 排序 , rowid 是一个 6 字节的字段 , 随着数据插入而单调递增 。也就是说 , 数据行根据 rowid 排序实际上是根据插入顺序排序 。
聚集索引如何提升查询效率通过聚集索引来访问一行数据是非常快的 , 这是因为所有的行数据和索引在同一页上 。如果表特别大 , 相较于行数据和索引在不同页上存储结构(比如 myisam 引擎) , 这将大大节省磁盘 I/O 资源 。
二级索引和聚集索引如何关联除了聚集索引外的其他索引类型都属于二级索引 。在 InnoDB 中 , 二级索引中的每个记录都包含该行的主键列 , 以及二级索引指定的列;聚集索引中 , InnoDB 通过主键值来查询数据行 。
【MySQL 聚集索引和二级索引】如果主键过长 , 二级索引就需要更大的空间 , 因此 , 使用短的主键列是很有利的 。




    推荐阅读