14.8.9 Clustered and Secondary Indexes

14.8.9 Clustered and Secondary Indexes

每个InnoDB 表有一个特殊的索引称为 clustered index 用于存储数据。

通常, clustered index 是主键的同义词。


为了使查询得到最好的性能,插入, 和其他数据库操作,你必须了解 InnoDB如何使用 clustered index 

来优化最创建的查询和DML操作对于每个表


1. 当你定义一个主键在你的表上, InnoDB 使用它作为clustered index.

定义一个主键对于每个你创建的表, 如果没有逻辑唯一或者非空列或者列的集合,增加一个新的自增列,

自增列的值会自动填充


2.如果你没有定义一个主键对于你的表, MySQL 定位第一个唯一索引 索引所有的列是NOT NULL 

InnoDB 使用它作为 clustered index. 


3.如果 table 没有主键索引或者合适的唯一索引,InnoDB 内部生成一个隐藏的 clustered index

在一个合成的列 包含row ID 值。

记录是按ID排序 InnoDB 分配给记录在这个表里。

 row ID 是一个6字节的字段 自动增加当新行插入时。因此, 激励安row ID排序是按物理插入的顺序


 Clustered Index 如何加速查询:


访问一个记录通过clustered index 是快速的因为 index 搜索直接指向page有所有的记录数据。

如果一个表是大的,clustered index 结构通常节省一个磁盘I/O操作当比较存储组织 存储记录使用一个不同的页

Secondary Indexes 和 Clustered Index的关系:

所有的索引除了 clustered index 都被称为secondary indexes.

在InnoDB, 每个记录在一个 secondary index 包含primary key columns 对于记录,

以及列指定用于secondary index. 

如果主键列是太长了, secondary indexes 使用更多的空间,因此一个短的主键是有优势的

posted @ 2016-11-11 15:05  czcb  阅读(242)  评论(0编辑  收藏  举报