MySQL学习笔记九:索引

1、索引分类

1.一、索引的分类有如下几种:sql

1)单值索引:即一个索引只包含单个列,一个表能够有多个单列索引。spa

2)惟一索引:索引列的值必须惟一,但容许有空值。code

3)复合索引:一个索引包含多个列,如INDEX MultiIdx(id,name,age)blog

4)全文索引:只有在MyISAM引擎上才能使用,只能在CHAR、VARCHAR、TEXT类型字段上使用全文索引。排序

5)空间索引:空间索引是对空间数据类型的字段创建的索引。索引

2、索引操做

2.一、建立索引table

语法:CREATE INDEX 索引名称 ON table (column[,column]...);class

CREATE INDEX ID_INDEX ON emp (ID);
CREATE INDEX NAME_INDEX ON emp (NAME);

2.二、删除索引select

语法:DROP INDEX 索引名称 ON 表名;数据类型

DROP INDEX NAME_INDEX ON emp;

2.三、查看索引

语法:SHOW INDEX FROM 表名;

SHOW INDEX FROM emp;

2.四、自动建立索引

1)在表上定义了主键时,会自动建立一个对应的惟一索引。

2)在表上定义了一个外键时,会自动建立一个普通索引。

3、EXPLAIN

3.一、关于EXPLAIN

做用:用来查看索引是否正在被使用,而且输出其使用的索引的信息。

3.二、EXPLAIN使用示例

3.三、EXPLAIN输出信息

id:select查询的序列号,包含一组数字,表示查询中执行select子句或操做表的顺序。

select_type:所使用的SELECT查询类型。

table:显示这一行的数据是关于哪张表的。

type:type显示的是访问类型,是较为重要的一个指标,结果值从最好到最差依次是:system>const>eq_ref>ref<range>index>all(倒序)通常来讲,保证查询至少达到range级别,最好能达到ref。

key:实际使用的索引,若为null,则没有使用到索引。(两种可能,①没创建索引。②创建索引,但索引失效)。查询中若使用了覆盖索引,则该索引仅出如今key列表中。

possible_keys:显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引将被列出,但不必定被查询实际使用。

key_len:表示索引中使用的字节数,可经过该列计算查询中使用的索引的长度。在不损失精确型的状况下,长度越短越好,key_len显示的值为索引字段的最大可能长度,并不是实际使用长度,即key_len是根据定义计算而得,不是经过表内检索出的。

ref:显示索引的哪一列被使用了,若是可能的话,是一个常数,哪些列或者常量被用于查找索引列上的值。只有当type为ref的时候,ref这列才会有值。

rows:根据表统计信息以及索引选用状况,大体估算出找到所需的记录所须要读取的行数,因此越小越好。能够用来查询sql的读取行数。

extra:包含不适合在其它列中显示但十分重要的额外信息。

4、哪些状况适合/须要建立索引

4.一、如下状况适合/须要建立索引:

1)主键(自动创建惟一索引)

2)外键

3)查询中与其它表关联的字段

4)频繁做为查询条件的字段

5)查询中统计或者分组的字段

6)查询中排序的字段

5、哪些状况不适合建立索引

5.一、如下状况不适合建立索引:

1)频繁更新的字段,由于每次更新不仅仅更新了记录还会更新索引。

2)WHERE条件里用不到的字段

3)表记录太少

4)常常增删改的表

5)若是某个数据列包含太多重复的内容(如性别,为它创建索引就没有太大的实际效果。)

相关文章
相关标签/搜索