首页 > 技术文章 > MySQL创建索引

liuyiyuan 2020-09-26 13:21 原文

速查语句



首先MySQL的索引分类是:

  • 主键索引 (建表时设置的主键就是)
  • 唯一索引
  • 普通索引
  • 复合索引
  • 全文索引(FULLTEXT,没用过这里不写了)

各类索引的创建语句略有不同

1. 建表时创建:

语法格式:

CREATE TABLE 表名(
	字段名 数据类型 [完整性约束条件],
	...,
	[UNIQUE | FULLTEXT] INDEX | KEY [索引名](字段名1 [(长度)] [ASC | DESC]) [USING 索引方法]
);

(刚知道原来还可以设置升序和降序。。。索引方法默认为B+Tree索引)

示例:

drop table if exists `t_upload_file`;
create table `t_upload_file`(
	`id` bigint auto_increment primary key comment '文件id',
  `name` varchar(255) default '' comment '上传的文件名',
  `location_url` varchar(500) not null comment '文件访问路径',
  `user_id` bigint not null comment '上传文件的用户',
  `upload_time` datetime default null comment '上传的时间',
  `update_time` datetime default null comment '最后修改时间',
  `delete_flag` char(1) default '0' comment '删除标志(0表示存在,1表示删除)伪删除',
  `remarks` varchar(500) default '' comment '备注信息',
	index idx_name(`name`) comment '创建一个普通索引'
)engine=innodb  default charset=utf8;

2. 建表后创建:

2.1 直接创建索引
CREATE  [UNIQUE | FULLTEXT | SPATIAL]  INDEX  索引名 ON  表名(字段名) [USING 索引方法];

示例:

create unique index `idx_name` on `t_upload_file`(`name`);   -- 唯一索引
2.2 修改表方式
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL]  INDEX | KEY  [索引名] (字段名1 [(长度)] [ASC | DESC]) [USING 索引方法];

示例:

alter table `t_upload_file` add key `idx_uid_name` (`user_id`,`name`);   -- 创建复合索引

3. 查看索引

语法格式:

SHOW INDEX FROM 表名;

示例:

show index from `t_upload_file`

4. 删除索引

语法格式:

DROP INDEX 索引名 ON 表名
或
ALTER TABLE 表名 DROP INDEX 索引名

示例:

drop index `idx_name` on `t_upload_file`

创建索引时最好加上索引名,否则系统自动生成索引名,要删除索引只能先查出名字,再删除。

推荐阅读