1.什么是索引
索引是一种高效查询数据的手段,分为普通索引,唯一索引,主键索引和组合索引。
普通索引:没有限制
CREATE INDEX indexName ON tablename(column1[,column2,……])
唯一索引:不允许重复,允许空值
CREATE UNIQUE INDEX indName ON tablename(column1[,column2,……])
主键索引: 一种特殊的唯一索引,不允许有空值,一般是在建表的时候指定了主键,就会创建主键索引。
CREATEINDEX indName ON tablename(column1[,column2,……])
组合索引:多个列的索引组合起来
全文索引:FULLTEXT,目前只有Innodb和MyISAM引擎主持,在全文搜索,仅适用于 CHAR, VARCHAR和 TEXT列。
tips:合理利用索引能提高数据访问速度(空间换时间)。
2.聚簇索引和非聚簇索引
B+树是mysql索引的数据结构,数据是存储在叶子结点上,非叶子结点只存储key。
聚簇索引和非聚簇索引是由索引的顺序是否和物理数据的顺序相同来决定的,是则是聚簇索引。
Innodb存储引擎的索引就是聚簇索引,如果索引是主键,则叶子结点储存的数据就是主键的那一行数据,所以通过索引查找直接就能获取到数据,而辅助索引的叶子结点储存的是主键值,所以通过辅助索引获取主键再通过主键索引获取数据。
MYSIAM存储引擎的索引是非聚簇索引,非聚簇索引的B+书叶子节点存储的数据是地址,通过这个地址去定位数据在表中的位置。
- 聚簇索引的表只有数据结构文件.frm和数据文件.idb,所以索引文件即是数据文件。
- MYISAM的非聚簇索引在获取到磁盘地址后,还要再根据磁盘地址去磁盘内取数据(回行)消耗时间,所以通常聚簇索引具有更快的查询速度。
- 通常来说,InnoDB引擎在建表时会将主键建立成一个主键索引,如果没有指定主键,会将一个唯一且非空的列作为索引来替代,如果不存在则会定义一个隐藏的主键来建立聚簇索引。
tips:欢迎来我的个人网站溜达溜达http://www.wsjiu.com/