介绍
索引可以提升查询速度,会影响where、以及order by排序
分类
从存储结构
B树索引、Hash索引、FULLTEXT索引、R树索引
从数据存储和索引键值逻辑关系
聚集索引、非聚集索引
1. 普通索引
最基本的索引类型,基于普通字段建立的索引,没有任何限制
操作
Create index [name] on tablename(fieldname);
Alter table tablename add index[name](fieldname);
Drop index [name] on tablename;
2. 唯一索引
与普通索引类似,不同就是:索引字段的值必须唯一,但允许有空值
创建或修改表时追加唯一约束,就会自动创建对应的唯一索引
操作
Create unique index [name] on tablename(fieldname);
Alter table tablename add unique index[name](fieldname);
3. 主键索引
一种特殊的唯一索引,不允许有空值
在创建或修改表时追加主键约束即可,每个表只能有一个主键
操作
Create table tablename([....], Primary key [fieldname]);
Alter table tablename Add Primary key [fieldname];
4. 复合索引
单一索引是指索引列为一列的情况,可以在多个列上建立索引,这种索引叫做组复合索引(组合索引)
复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引
概念
设计索引的一个重要原则就是能用窄索引就不用宽索引,因为窄索引往往比宽索引更有效
操作
Create index [name] on tablename(field1, field2, ....);
Alter table tablename add index[name](field1, field2, ....);
注意事项
复合索引字段是有顺序的,在查询时要按照索引字段的顺序使用
何时使用复合索引,要根据where条件建立索引,注意不要过多使用索引,过多使用会对更新操作效率有很大影响
如果建立了组合索引,就没有必要建立单一索引,反之可以建立,对于查询有一定提高
5. 全文索引
数据量较少时,可以使用like模糊查询,但是对于大量的文本数据检索,效率很低。使用全文索引,查询速度会比like快很多
MySQL5.6之前,只有MyISAM引擎支持全文索引,5.6开始MyISAM和InnoDB都支持
操作
Create Fulltext index [name] on tablename(field);
Alter table tablename add Fulltext [name] (field);
和常用的like模糊查询不同,全文索引有自己的语法格式,使用match和against关键字
注意事项
全文索引必须在字符串、文本字段上建立
全文索引字段值必须在最小字符和最大字符之间的才会有效
innodb:3-84
myisam:4-84
全文索引字段值要进行切词处理,按syntax字符进行切割
如b+aaa,切分为b和aaa
全文索引匹配查询,默认使用的是等值匹配
如a不会匹配ab、ac
想匹配可使用布尔模式搜索‘a*’