建立索引的语句:

CREATE [UNIQUE|NONCLUSTERED|CLUSTERED] INDEX INDEX_NAME ON TABLE_NAME(COL_NAME) [where ......]

说明:

UNIQUE:唯一索引,相应列上不可插入重复值

NONCLUSTERED:非聚集索引

CLUSTERED:聚集索引

INDEX_NAME:索引名

TABLE_NAME:表名

COL_NAME:建立索引的字段名。可以为多列,称为复合索引,查询时字段顺序需要和建立索引的顺序一致

[where......]:筛选索引的条件,只对符合条件的记录建立索引

一、索引概念

        我的理解,索引就像是目录一样,而实际的数据表的值就是具体的内容。使用索引可以提高查询速度。

       1、 聚集索引:

        一个表只能有一个。索引的顺序与数据表的排列顺序一致。

       聚集索引的约束是唯一性,如果未使用 UNIQUE 属性创建聚集索引,innodB数据库引擎将向表自动添加一个四字节 uniqueifier 列。必要时,数据库引擎 将向行自动添加一个 uniqueifier 值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。

        在mysql中,我们创建的主键会自动建立聚集索引,数据是按照我们的主键顺序进行排列。所以在根据主键进行查询时会非常快。

        2、非聚集索引:

        一个表可以有多个。索引的顺序与数据表的排列顺序不一致。

       覆盖索引(非聚集索引的一种形式):索引包含(亦称覆盖)所有需要查询的字段的值,我们称这种索引为覆盖索引。索引的叶子节点包含了要查询的数据,无需回表查询。

二、使用索引的条件

动作描述

使用聚集索引

使用非聚集索引

列经常被分组排序

返回某范围内的数据

不应

一个或极少不同值

不应

不应

小数目的不同值

不应

大数目的不同值

不应

频繁更新的列

不应

外键列

主键列

频繁修改索引列

不应

接下来会再学习索引的底层实现原理。