首先,我们要知道什么是索引,索引的类型有哪些。
1. 什么是索引?
索引就是类似书的目录,提高检索数据的效率。
索引是系统按照某个具体的算法(哈希,散列,二叉树),将数据从全部数据里进行提取,维护成一个索引文件,然后系统在进行数据查询的时候,发现如果查询条件刚好满足索引条件,就可以从索引文件中快速的定位的数据所在位置。
就是换句话说,索引就是利用字段的某些属性快速的定位数据(磁盘,柱面,磁道,扇区)
2.mysql中有哪些索引?
主键索引(primary key)(效率最高的索引)
要求:数据记录里面不能有null,数据内容不能重复,在一张表里面不能有多个主键索引。
唯一索引(unique key):不为空的情况下效率最高(在MySQL中为空一般指的是值为NULL)
要求:字段数据是唯一的,数据内容里面能为null,在一张表里面,是可以添加多个唯一索引。
普通索引(index)对数据没有要求,文件很大,效率比较低
要求:使用字段关键字建立的索引,主要是提高查询速度。
全文索引(fulltext),对整个文章内部进行关键字索引(mysql5.6以后InnoDB支持全文索引)
* 在mysql中全文索引不支持中文。
英文的全文索引很简单:英文单词默认是用空格分离的
中文的全文索引很难:中文的词组成很麻烦,需要利用分词工具(sphinx)。
3.添加索引
alter table 表名 add 索引(字段名);
主键索引:primary key 唯一索引:unique key
普通索引:key/index 全文索引:fulltext index
4.删除索引
主键索引的删除,在删除主键 索引时,如果有自增长,先修改掉自增长,再删除主键
在有自增的情况下: alter table 表名 modify id int;【重新定义磊列类型】
alter table 表名 drop primary key
普通索引的删除 | 删除唯一索引 | 删除全文索引 :
alter table 表名 drop index 索引名字 (如果索引名称没有指定则是索引的字段名称)
5.查看索引
1)show index from 表名\G \G:将数据竖列展示
2)show indexes from 表名
3)desc 表名
4)show create table 表名
6.创建索引的注意事项 (主要是针对where条件进行优化)
(1)较频繁的作为查询条件字段应该创建索引
select * from emp where empno = 1
(2)唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
select * from emp where sex = '男‘
(3)更新非常频繁的字段不适合创建索引
select * from emp where logincount = 1
(4)不会出现在WHERE子句中字段不该创建索引