MySql中InnoDB引擎索引
2016-05-01 15:06
621 查看
Mysql中InnoDB引擎的索引分两类,一类是一级索引(主键的同义词),一类是二级索引(非主键的索引)。两类索引都使用B+tree形式组织,但一级索引的叶子节点包含所以对应的整行信息,所有的查询最终都是通过一级索引完成,二级索引只包含二级索引对应的一级索引。所以直接使用一级索引比用二级索引快,因为少了一系列二级索引到一级索引的磁盘I/O。同时,使用主键查询时,这种数据组织方式也比数据和索引分开要快一次磁盘I/O操作。(MyISAM使用数据和索引分离的组织方式)
一级索引只有一个,毕竟主键最多只有一个,但二级索引可以有多个,因为一张表可以建立多个非主键索引。但每次查询只会选择一个索引。
MySql会按照以下规则建立一级索引:
如果定义了主键,那么MySql会选择主键作为一级索引;
如果没有定义主键,那么MySql会选择第一个定义了非空的唯一索引(UNIQUE AND NOT NULL)作为主键,并且作为一级索引;
如果没有定义主键也没有定义非空的唯一索引,那么MySql会隐式的生成一级索引,索引的列是MySql为每一行数据生成的行号。行号是一个6字节的数,按照插入顺序单调递增。
参考链接:
http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html
一级索引只有一个,毕竟主键最多只有一个,但二级索引可以有多个,因为一张表可以建立多个非主键索引。但每次查询只会选择一个索引。
MySql会按照以下规则建立一级索引:
如果定义了主键,那么MySql会选择主键作为一级索引;
如果没有定义主键,那么MySql会选择第一个定义了非空的唯一索引(UNIQUE AND NOT NULL)作为主键,并且作为一级索引;
如果没有定义主键也没有定义非空的唯一索引,那么MySql会隐式的生成一级索引,索引的列是MySql为每一行数据生成的行号。行号是一个6字节的数,按照插入顺序单调递增。
参考链接:
http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复