索引

索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。它是一种以空间换时间的典型用法,它把数据查询的结构以B+树的形式存储在本地,虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

索引类别

普通索引

//最基本的索引,它没有任何限制
CREATE INDEX indexName ON mytable(username(length));     //创建
ALTER mytable ADD INDEX [indexName] ON (username(length)) ;		//添加
DROP INDEX [indexName] ON mytable;    //删除
//创建表时指定
CREATE TABLE mytable(
  ID INT NOT NULL,
  username VARCHAR(16) NOT NULL,
  INDEX [indexName](username(length))
);

主键索引

//主键索引在创建表时直接创建,且不许为null
CREATE TABLE mytable(
  ID INT NOT NULL,
  username VARCHAR(16) NOT NULL,
  PRIMARY KEY(ID)
 );

唯一索引

//索引列的值必须唯一,但允许有空值
CREATE UNIQUE INDEX indexName ON mytable(username(length))		//创建
ALTER mytable ADD UNIQUE [indexName] ON (username(length)) ;	//修改

组合索引

ALTER TABLE mytable ADD INDEX mytable (indexName1(10),indexName2,indexName3);
//相当于建立三组组合索引
indexName1(10),indexName2,indexName3
indexName1(10),indexName2
indexName1(10),indexName3

注意事项

1、不要在索引列上进行运算

2、不使用NOT IN和<>操作

3、尽可能短地建立索引

4、索引不会包含有NULL值的列

创建原则

1、较频繁的作为查询条件的字段应该创建索引

2、重复太多的字段不适合单独创建索引,即使频繁作为查询条件

3、不会出现在WHERE子句中的字段不应该创建索引

4、表的记录比较少,比如只有几百,一千条记录,那么没必要建立索引,直接全表查询即可。

5、不重复的字段越多,那么索引的价值越高

5、EXPLAIN Sql语句可以查看查询效率