1.一、索引的分类有如下几种:sql
1)单值索引:即一个索引只包含单个列,一个表能够有多个单列索引。spa
2)惟一索引:索引列的值必须惟一,但容许有空值。code
3)复合索引:一个索引包含多个列,如INDEX MultiIdx(id,name,age)blog
4)全文索引:只有在MyISAM引擎上才能使用,只能在CHAR、VARCHAR、TEXT类型字段上使用全文索引。排序
5)空间索引:空间索引是对空间数据类型的字段创建的索引。索引
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输出信息
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.一、如下状况适合/须要建立索引:
1)主键(自动创建惟一索引)
2)外键
3)查询中与其它表关联的字段
4)频繁做为查询条件的字段
5)查询中统计或者分组的字段
6)查询中排序的字段
5.一、如下状况不适合建立索引:
1)频繁更新的字段,由于每次更新不仅仅更新了记录还会更新索引。
2)WHERE条件里用不到的字段
3)表记录太少
4)常常增删改的表
5)若是某个数据列包含太多重复的内容(如性别,为它创建索引就没有太大的实际效果。)