MySql中InnoDB引擎索引

来源:互联网 发布:js中有哪些事件 编辑:程序博客网 时间:2024/05/17 05:58

Mysql中InnoDB引擎的索引分两类,一类是一级索引(主键的同义词),一类是二级索引(非主键的索引)。两类索引都使用B+tree形式组织,但一级索引的叶子节点包含所以对应的整行信息,所有的查询最终都是通过一级索引完成,二级索引只包含二级索引对应的一级索引。所以直接使用一级索引比用二级索引快,因为少了一系列二级索引到一级索引的磁盘I/O。同时,使用主键查询时,这种数据组织方式也比数据和索引分开要快一次磁盘I/O操作。(MyISAM使用数据和索引分离的组织方式)

一级索引只有一个,毕竟主键最多只有一个,但二级索引可以有多个,因为一张表可以建立多个非主键索引。但每次查询只会选择一个索引。
MySql会按照以下规则建立一级索引:

  1. 如果定义了主键,那么MySql会选择主键作为一级索引;
  2. 如果没有定义主键,那么MySql会选择第一个定义了非空的唯一索引(UNIQUE AND NOT NULL)作为主键,并且作为一级索引;
  3. 如果没有定义主键也没有定义非空的唯一索引,那么MySql会隐式的生成一级索引,索引的列是MySql为每一行数据生成的行号。行号是一个6字节的数,按照插入顺序单调递增。

参考链接:
http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html

0 0
原创粉丝点击