【MySQL】索引的创建、查看和删除

举报
Laura_张 发表于 2022/08/27 22:31:48 2022/08/27
【摘要】 文章目录 一、创建索引1、在创建表的同时创建索引① 创建普通索引② 创建唯一性索引③ 创建主键索引④创建单列索引⑤ 创建联合索引⑥ 创建全文索引⑦ 创建空间索引 2、在已经创建好的表上创建索...

一、创建索引

1、在创建表的同时创建索引

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

① 创建普通索引

CREATE TABLE book(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
INDEX idx_bname(book_name)
);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

② 创建唯一性索引

声明有唯一索引的字段,在添加数据时,要保证唯一性,但是可以添加null
唯一性索引的关键字:unique

CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
UNIQUE INDEX uk_idx_cmt(COMMENT)
);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

③ 创建主键索引

设定为主键后数据库会自动建立索引,innodb为聚簇索引,语法:
关键字:PRIMARY KEY

#通过定义主键约束的方式定义主键索引
CREATE TABLE book2(
book_id INT PRIMARY KEY ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR
);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意:删除主键索引:通过删除主键约束的方式来删除主键索引

ALTER TABLE book2
DROP PRIMARY KEY;

  
 
  • 1
  • 2

修改主键索引:必须先删除掉(drop)原索引,再新建(add)索引

④创建单列索引

CREATE TABLE book3(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
UNIQUE INDEX idx_bname(book_name)
);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

⑤ 创建联合索引

CREATE TABLE book4(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
INDEX mul_bid_bname_info(book_id,book_name,info)
);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

⑥ 创建全文索引

fulltext全文索引可以用于全文搜素,并且只为char varchar 和text列创建索引。
索引总是对整个列进行,不支持局部(前缀)索引。

CREATE TABLE test4(
id INT NOT NULL,
NAME CHAR(30) NOT NULL,
age INT NOT NULL,
info VARCHAR(255),
FULLTEXT INDEX futxt_idx_info(info(50))
# info(50)属于局部(前缀)索引,当前不支持,只会对当前列进行全部搜索
)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

全文索引可以创建多列

CREATE TABLE articles (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
  title VARCHAR (200),
  body TEXT, 
  FULLTEXT index (title, body) 
) ENGINE = INNODB ;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

tips:用于模糊查询

like方式的查询:

SELECT * FROM papers WHERE content LIKE%查询字符串%;

  
 
  • 1

全文索引用match+against方式查询:

SELECT * FROM papers WHERE MATCH(title,content) AGAINST (‘查询字符串’);

  
 
  • 1

注意点
1. 使用全文索引前,搞清楚版本支持情况;
2. 全文索引比 like + % 快 N 倍,但是可能存在精度问题;
3. 如果需要全文索引的是大量数据,建议先添加数据,再创建索引。

⑦ 创建空间索引

空间索引创建中,要求空间类型的字段必须为 非空 。
举例:创建表test5,在空间类型为GEOMETRY的字段上创建空间索引,SQL语句如下:

CREATE TABLE test5( 
  geo GEOMETRY NOT NULL, 
  SPATIAL INDEX spa_idx_geo(geo) 
) ENGINE=MyISAM;

  
 
  • 1
  • 2
  • 3
  • 4

2、在已经创建好的表上创建索引

在已经存在的表中创建索引可以使用ALTER TABLE语句或者CREATE INDEX语句。

① 使用alter table语句创建索引

基本语法:alter table …add…

#创建数据表
CREATE TABLE book5(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR
);

# 创建索引 alter table ...add...
# 普通索引
ALTER TABLE book5 ADD INDEX idx_cmt(COMMENT);
# 唯一性索引
ALTER TABLE book5 ADD UNIQUE uk_idx_bname(book_name);
# 联合索引
ALTER TABLE book5 ADD INDEX mul_bid_bname_info(book_id,book_name,info);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

② 使用create index创建索引

基本语法:create index…on…

CREATE INDEX语句可以在已经存在的表上添加索引,在MySQL中, CREATE INDEX被映射到一个ALTER TABLE语句上,基本语法结构为:

# 创建数据表
CREATE TABLE book6(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR
);

# 创建索引 create index...on....
# 普通索引
CREATE INDEX idx_cmt ON book6(COMMENT);
# 唯一性索引
CREATE UNIQUE INDEX  uk_idx_bname ON book6(book_name);
# 联合索引
CREATE INDEX mul_bid_bname_info ON book6(book_id,book_name,info);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

二、查看索引

通过命令查看索引
方式一:

SHOW CREATE TABLE book;

  
 
  • 1

方式二:

SHOW INDEX FROM book;

  
 
  • 1

三、删除索引

1、使用ALTER TABLE删除索引

ALTER TABLE删除索引的基本语法格式如下: ALTER TABLE … DROP INDEX …

ALTER TABLE book5 
DROP INDEX idx_cmt;

  
 
  • 1
  • 2

提示:添加Auto_increment(自增长)约束字段的唯一索引不能被删除

2、使用DROP INDEX语句删除索引

DROP INDEX删除索引的基本语法格式如下: DROP INDEX … ON …

DROP INDEX uk_idx_bname ON book5;

  
 
  • 1

tips:删除联合索引中的相关字段(删除表中字段)

删除联合索引中的相关字段

ALTER TABLE book5
DROP COLUMN book_name;

  
 
  • 1
  • 2

提示:删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除,则整个索引将被删除。

文章来源: blog.csdn.net,作者:张艳伟_Laura,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Laura__zhang/article/details/125533000

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。