MySQL创建索引
速查语句
首先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`
创建索引时最好加上索引名,否则系统自动生成索引名,要删除索引只能先查出名字,再删除。