索引的创建与设计原则
【摘要】 索引的声明与使用索引的分类MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 ,索引可以分为 2 种:聚簇索引和非聚簇索引。 按照 作用字段个数 进行划分,分成单列索引和联合索引。小结:不同的存储引擎支持的索引类型也不一样 InnoDB :支持 B-...
索引的声明与使用
索引的分类
MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。
按照 物理实现方式 ,索引可以分为 2 种:聚簇索引和非聚簇索引。
按照 作用字段个数 进行划分,分成单列索引和联合索引。
小结:不同的存储引擎支持的索引类型也不一样 InnoDB :支持 B-tree、Full-text 等索引,不支持 Hash
索引; MyISAM : 支持 B-tree、Full-text 等索引,不支持 Hash 索引; Memory :支持 B-tree、Hash 等 索引,不支持 Full-text 索引; NDB :支持 Hash 索引,不支持 B-tree、Full-text 等索引; Archive :不支 持 B-tree、Hash、Full-text 等索引;
创建索引
创建表的时候创建索引
但是,如果显式创建表时创建索引的话,基本语法格式如下:
UNIQUE 、 FULLTEXT 和 SPATIAL 为可选参数,分别表示唯一索引、全文索引和空间索引;
INDEX 与 KEY 为同义词,两者的作用相同,用来指定创建索引;
index_name 指定索引的名称,为可选参数,如果不指定,那么MySQL默认col_name为索引名;
col_name 为需要创建索引的字段列,该列必须从数据表中定义的多个列中选择;
length 为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度;
ASC 或 DESC 指定升序或者降序的索引值存储。
创建普通索引
在book表中的year_publication字段上建立普通索引,SQL语句如下:
创建唯一索引
该语句执行完毕之后,使用SHOW CREATE TABLE查看表结构:
主键索引
设定为主键后数据库会自动建立索引,innodb为聚簇索引,语法:
随表一起建索引:
删除主键索引:
修改主键索引:必须先删除掉(drop)原索引,再新建(add)索引
创建单列索引
该语句执行完毕之后,使用SHOW CREATE TABLE查看表结构:
创建组合索引
举例:创建表test3,在表中的id、name和age字段上建立组合索引,SQL语句如下:
该语句执行完毕之后,使用SHOW INDEX 查看:
创建全文索引
举例1:创建表test4,在表中的info字段上建立全文索引,SQL语句如下:
在MySQL5.7及之后版本中可以不指定最后的ENGINE了,因为在此版本中InnoDB支持全文索引
举例2:
创建了一个给title和body字段添加全文索引的表。
举例3:
不同于like方式的的查询
全文索引用match+against方式查询:
创建空间索引
空间索引创建中,要求空间类型的字段必须为 非空 。
创建表test5,在空间类型为GEOMETRY的字段上创建空间索引,SQL语句如下:
2. 在已经存在的表上创建索引
在已经存在的表中创建索引可以使用ALTER TABLE语句或者CREATE INDEX语句。
1. 使用ALTER TABLE语句创建索引 ALTER TABLE语句创建索引的基本语法如下:
2. 使用CREATE INDEX创建索引 CREATE INDEX语句可以在已经存在的表上添加索引,在MySQL中,CREATE INDEX被映射到一个ALTER TABLE语句上,基本语法结构为:
删除索引
1. 使用ALTER TABLE删除索引 ALTER TABLE删除索引的基本语法格式如下:
2. 使用DROP INDEX语句删除索引 DROP INDEX删除索引的基本语法格式如下:
提示 删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成 索引的所有列都被删除,则整个索引将被删除。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)