数据库|详解索引

一、索引的概述

  • 是存储引擎用于快速找到数据记录的一种数据结构,可快速访问数据库表中的特定信息。(类似于书的目录的作用)
  • 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

二、索引的优点

提高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为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度

  • 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 表名;

猜你喜欢

转载自blog.csdn.net/Geekst/article/details/90550450