14.2.6.2 Clustered and Secondary Indexes 聚簇索引和第2索引
每个InnoDB 表有一个特别的索引叫做clustered index,用于行的数据被保存,
clustered index 是主键的同义词。 为了得到最好的查询性能,插入和其他数据库操作,
你必须了解InnoDB如何使用 clustered index 来优化常用的查询和DML操作。
1.当你定义了表的主键,InnoDB 使用它作为 clustered index .
为你创建的每个表定义一个主键, 如果没有一个逻辑的unique 和非空列或者多列,
增加一个自动增加的列,其值是自动填充的。
2.如果你不定义一个表的主键,MySQL 定位第一个UNIQUE index ,所有的列都是NOT NULL
InnoDB 使用它作为一个clustered index
3.如果表没有主键或者合适的UNIQUE index,InnoDB 内部产生一个隐藏的clustered index 在一个隐藏的列
包含row ID 值。
rows 是按ID排序,InnoDB 分配记录在这些表里。
row ID 是一个 6字节域 单调的增加到新的记录插入时, 记录按row ID 排序是按物理插入的顺序
Clustered Index 如何加速查询:
访问 一条记录通过clustered index 是快速的 因为索引搜索直接导致 所有行的页。
如果表是大的,clustered index 结构通常保存一个disk I/O 操作 当跟其他的存储组织对比
参数数据行使用一个不同的页。(比如,MyISAM 使用一个文件用于数据,另一个用于Index records)
How Secondary Indexes Relate to the Clustered Index
所有的indexes 除了clustered index 是一个 secondary indexes.
在InnoDB,每个record 在 secondary index 包含主键列, 以及在 secondary index指定的列。
InnoDB 使用主键值来搜索记录。
如果主键是长的, secondary indexes 使用更多的空间, 一个短的主键是有利的。