一、索引的概述
- 是存储引擎用于快速找到数据记录的一种数据结构,可快速访问数据库表中的特定信息。(类似于书的目录的作用)
- 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
二、索引的优点
提高MySQL的检索速度。
三、索引的缺点
- ①降低更新表的速度
如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 - ②占用磁盘空间的索引文件
四、索引的类型
-
普通索引(常规索引)----单列索引
一张数据表中可以有多个常规索引。如果没有明确指明索引的类型,我们所说的索引都是指常规索引。 -
复合索引(组合索引)
复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第一个字段,索引才会被使用。因此,在复合索引中索引列的顺序至关重要。 -
唯一索引
提供唯一性约束。一张表中可以有多个唯一索引。 -
主键索引
也称为主键,提供唯一性约束。一张表中只能有一个主键。被标志为自动增长的字段一定是主键,但主键不一定是自动增长。一般把主键定义在无意义的字段上(如:编号),主键的数据类型最好是数值。 -
全文索引
提高全文搜索的查询效率。
五、创建索引
CREATE TABLE table_name[col_name data type]
[unique|fulltext][index|key][index_name](col_name[length])[asc|desc]
-
unique|fulltext为可选参数,分别表示唯一索引、全文索引
-
index和key为同义词,两者作用相同,用来指定创建索引
-
col_name为需要创建索引的字段列,该列必须从数据表中该定义的多个列中选择
-
index_name指定索引的名称,为可选参数,如果不指定,默认col_name为索引值
-
length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度
扫描二维码关注公众号,回复: 6394416 查看本文章 -
asc或desc指定升序或降序的索引值存储
六、索引的创建
1、普通索引
a、直接法
CREATE INDEX 索引名 ON 表名(username(length));
注:如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。
b、修改表结构的方式添加索引
ALTER TABLE 表名 ADD INDEX 索引名(col_name);
c、创建表同时创建索引
2、复合索引
复合索引建立在多个字段上进行创建。
a、直接法
create index 索引名 on 表名(字段1,字段2,...);
b、使用修改表结构的方式
ALTER TABLE 表名 add index 索引名(字段1,字段2,...);
3、唯一索引
a、直接法
# 单个
CREATE UNIQUE INDEX 索引名 ON table_name(col_name);
# 多个
CREATE UNIQUE INDEX 索引名 on table_name(col_name1,col_name2...);
# 注意单个、多个指的是字段
b、修改表结构的方法
# 单个
ALTER TABLE table_name ADD UNIQUE index index_name(col_name);
# 多个
ALTER TABLE table_name ADD UNIQUE index index_name(col_name1,col_name2...);
# 注意单个、多个指的是字段
c、创建表的同时创建索引
CREATE TABLE news (
id int(11) NOT NULL AUTO_INCREMENT ,
title varchar(255) NOT NULL ,
content varchar(255) NULL ,
PRIMARY KEY (`id`),
UNIQUE index_name_unique(title)
)
4、主键索引
a、创建表的同时创建索引
CREATE TABLE news (
id int(11) NOT NULL AUTO_INCREMENT ,
title varchar(255) NOT NULL ,
content varchar(255) NULL ,
PRIMARY KEY (`id`)
)
b、创建表后再创建索引
ALTER TABLE 表名 ADD primary key(col_name);
c、使用ALTER增加主键
注:主键只能作用于一个列上,添加主键索引时,需要确保该主键默认不为空(NOT NULL)
例:
ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
5、全文索引
a、直接法
CREATE FULLTEXT INDEX 索引名 ON 表名(col_name);
b、创建表的同时创建索引
CREATE TABLE table (
id int(11) NOT NULL AUTO_INCREMENT ,
title char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
content text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
PRIMARY KEY (`id`),
FULLTEXT (content));
c、修改表的结构
ALTER TABLE 表名 ADD FULLTEXT 索引名(col_name);
注: 默认 MySQL 不支持中文全文检索!
6、添加索引时括号中的字段名可以多个
七、索引的删除和查询
1、删除索引
DROP INDEX 索引名 ON 表名;
或者
ALTER TABLE 表名 DROP INDEX 索引名;
2、查询索引
show indexes from 表名;
或者
show keys from 表名;