MySQL索引的分类和创建

索引的分类和创建

  • 索引的分类
    • 普通索引
    • 唯一索引
    • 主键索引
    • 单列索引
    • 联合索引
  • 索引的创建方式
    • 创建表的时候创建索引
    • 给已有的表添加索引
      • 使用 ALTER TABLE 方式添加
      • 使用 CREATE INDEX 方式添加
    • 删除索引

索引的分类

MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
从功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。
按照物理实现方式 ,索引可以分为 2 种:聚簇索引和非聚簇索引。
按照作用字段个数进行划分,分成单列索引和联合索引。

普通索引

在创建普通索引时,不附加任何限制条件,只是用于提高直询效率。这类索引可以创建在任何数据类型中,其值是否唯一和非空,要由字段本身的完整性约束条件决定。建立索引以后,可以通过索引进行查询。
例如,在表student的字段name上建立一个普通索引,查询记录时就可以根据该索引进行查询。

唯一索引

使用UNIQUE参数可以设置索引为唯一性索引,在创建唯一性索引付,限制该索引的值必须是唯一的,但允许有空值。在一张数据表里可以有多个唯一索引。
例如,在表student的字段email中创建唯一性索引,那么字段email的值就必须是唯一的。通过唯一性索引,可以更快速地确定某条记录。

主键索引

主键索引就是一种特殊的唯一性索引,在唯一索引的基础上增了不为空的约束,也就是NOT NULL+UNIQUE,一张表里最多只有一个主键索引。
为什么一张表里只能有一个主键索引?
这是由主键索引的物理实现方式决定的,因为数据存储存储存在文件中只能按照一种顺序进行存储。

单列索引

在表中的单个字段上创建索引。单列索引只根据该字段进行索引单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段即可。一个表可以有多个单列索引。

联合索引

多列索引是在表的多个字段组合上创建一个索引。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询,但是只有查询条件中使用了这些字段中的第一个字段时才才会被使用。
例如,在表中的字段id、name和gender上建立一个多列索引 idx_id_name_gender,只有在查询条件中使用了字段id时该索引才会被使用。使用组合索引时遵循最左前缀集合。

索引的创建方式

创建表的时候创建索引

使用CREATE TABLE创建表时,除了可以定义列的数据类型外,还可以定义主键约束、外键约束或者唯一性约束,而不论创建哪种约束,在定义约束的同时相当于在指定列上创建了一个索引
例如:

CREATE TABLE dept(
dept_id INT PRIMARY KEY AUTO_INCREMENT,
dept_name VARCHAR(20)
);

创建普通索引

CREATE TABLE book(
book_id INT ,
book_name VARCHAR(100),
authors VARCHAR(100),
info VARCHAR(100) ,
comment VARCHAR(100),
year_publication YEAR,
INDEX(year_publication)
);

创建唯一索引

CREATE TABLE test1(
id INT NOT NULL,
name varchar(30) NOT NULL,
UNIQUE INDEX uk_idx_id(id)
);

查看索引

SHOW INDEX FROM test1

主键索引

CREATE TABLE student (
id INT(10) UNSIGNED AUTO_INCREMENT ,
student_no VARCHAR(200),
student_name VARCHAR(200),
PRIMARY KEY(id)
);

删除主键索引

ALTER TABLE student
drop PRIMARY KEY;

创建单列索引

CREATE TABLE test2(
id INT NOT NULL,
name CHAR(50) NULL,
INDEX single_idx_name(name(20))
);

创建组合索引

CREATE TABLE test3(
id INT(11) NOT NULL,
name CHAR(30) NOT NULL,
age INT(11) NOT NULL,
info VARCHAR(255),
INDEX multi_idx(id,name,age)
);

给已有的表添加索引

使用 ALTER TABLE 方式添加

ALTER TABLE book3 ADD INDEX idx_cmt(COMMENT);
ALTER TABLE book3 ADD UNIQUE INDEX idx_cmt2(COMMENT);
ALTER TABLE book3 ADD INDEX idx_cmt3(book_id,COMMENT);

使用 CREATE INDEX 方式添加

CREATE INDEX inx_c ON book4(COMMENT);

删除索引

1. 使用ALTER TABLE删除索引 ALTER TABLE删除索引的基本语法格式如下:

ALTER TABLE table_name DROP INDEX index_name;

2. 使用DROP INDEX语句删除索引 DROP INDEX删除索引的基本语法格式如下:

DROP INDEX index_name ON table_name;

你可能感兴趣的:(mysql,数据库)