一、索引简介
mysql支持的索引类型:普通索引、唯一索引、全文索引、单列索引、多列索引、空间索引。
索引的作用是约束数据的唯一性,多用于快速查找数据,一般用在频繁查找的字段上。
索引创建在数据表对象上,由一个或多个字段组成,索引KEY以B树或哈希表的形式存储在数据结构中,根据数据结构分类成B树索引(innodb/myisam引擎),哈希索引(memory引擎)。
主键与索引的区别:主键也是一种索引,索引的作用主要是提高查找速度,而主键的作用主要是标识记录唯一性。
二、创建索引
1、普通索引
不要求数据唯一、不为空的索引。
语法:
1)新创建表结构时:
create table 表名(
字段 数据类型,
…
index|key [索引名] (字段 [索引的长度] [asc|desc])
);
参数说明:
index|key:可选index或key关键字
索引名:可选,不填时索引名为字段名
字段:加索引的字段,字段可以是一个或多个(多列索引)
索引的长度:可选
asc|desc:可选,代表索引中的“关键字”的排序
2)在现有表结构的情况下增加索引:
create index 索引名 on 表名(字段 [索引的长度] [asc|desc]);
或
alter table 表名 add index|key 索引名(字段 [索引的长度] [asc|desc]);
2、唯一索引
在创建索引时,要求表中字段的数据是唯一的。
语法:
1)新创建表结构时:
create table 表名(
字段 数据类型,
…
unique index|key [索引名] (字段 [索引的长度] [asc|desc])
);
2)在现有表结构的情况下增加索引:
create unique index 索引名 on 表名(字段 [索引的长度] [asc|desc]);
或
alter table 表名 add unqiue index|key 索引名(字段 [索引的长度] [asc|desc]);
3、全文索引
全文索引一般用在数据类型为char,varchar,text字段上,便于查找内容较长的数据。
语法:
1)新创建表结构时:
create table 表名(
字段 数据类型,
…
fulltext index|key [索引名] (字段 [索引的长度] [asc|desc])
);
2)在现有表结构的情况下增加索引:
create fulltext index 索引名 on 表名 (字段 [索引的长度] [asc|desc]);
或
alter table 表名 add fulltext index|key 索引名(字段 [索引的长度] [asc|desc]);
4、单列索引
当索引包含的字段为一个时,为单列索引;
创建格式同普通索引;
5、多列索引
当加索引的字段为多个时,为多列索引;
语法:
1)新创建表结构时:
create table 表名(
字段 数据类型,
…
index|key [索引名] (字段1 [索引的长度] [asc|desc],字段2 [索引的长度] [asc|desc]...)
);
2)在现有表结构的情况下增加索引:
create index 索引名 on 表名(字段1 [索引的长度] [asc|desc],字段2 [索引的长度] [asc|desc]...);
或
alter table 表名 add index|key 索引名(字段1 [索引的长度] [asc|desc],字段2 [索引的长度] [asc|desc]...);
三、查看索引
1)通过查看表创建语句查看索引;
2)通过查看表结构查看索引:desc table;
3)使用explain解释语句查看索引,explain用于分析SQL语句执行效率;
如:EXPLAIN select * from table1;
四、删除索引
语法:drop index 索引名 on 表名;
如:drop index idx1 on table1;