MySQL索引

一、索引简介

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;

你可能感兴趣的:(MySQL索引)