索引
索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。它是一种以空间换时间的典型用法,它把数据查询的结构以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语句可以查看查询效率