前言
在数据库中如何创建索引。本文中练习中,使用的表数据DDL如下:
create table tb_user
(
id int auto_increment comment '主键'
primary key,
name varchar(50) not null comment '用户名',
phone varchar(11) not null comment '手机号',
email varchar(100) null comment '邮箱',
profession varchar(11) null comment '专业',
age tinyint unsigned null comment '年龄',
gender char null comment '性别 , 1: 男, 2: 女',
status char null comment '状态',
createtime datetime null comment '创建时间'
) comment '系统用户表';
一、创建索引
CREATE [ UNIQUE |FULLTEXT] INDEX index_ name ON table_ name ( index_ _col name,.. );
含义:
(1)[]:内为可选项,默认为常规索引。
UUNIQUE:创建唯一索引,不能出现重复的数据。
FULLTEXT:创建全文索引
(2)index_ name:索引名称
索引名称一般规范为idx_表名_表中索引的字段名。
例如:idx_user_name;
含义:在user表中的name字段创建索引。
(3)table_ name:表名
(4)( index_ _col name,.. ):具体的表中字段,...表示可以关联多个字段。
注:联合索引的创建在(4)中,字段的创建顺序是有序的。
二、查看索引
SHOW INDEX FROM table_ name ;
含义:table_ name:表名
三、删除索引
DROP INDEX index_ name ON table_ name ;
四、练习
1.name字段为姓名字段,该字段的值可能会重复,为该字段创建索引。
分析:
name字段会重复,所以不需要唯一字段来查询,创建普通的索引即可满足。
在innodb数据库中有两种索引:
(1)聚集索引:主键存在而存在的,唯一的。若没有主键,则会找UNIQUE。若没有UNIQUE,会默认创建一个id值(效果和主键一样)。
(2)非聚集索引(二级索引):非主键创建的索引,可以有多个。
语句:create index ide_user_name on tb_user(name);
2.phone手机号字段的值, 是非空,且唯一的,为该字段创建唯一索引。
分析:
题目要求为唯一索引。
语句:create unique index ide_user_phone on tb_user(phone);
3.为profession, age、status创建 联合索引。
分析:
题目要求为联合索引。联合索引要注意字段的顺序。
语句:create index ide_user_pro_age_stat on tb_user(profession,age,status);
4.为email建立合适的索引来提升查询效率。
分析:
email的字符不唯一的,使用普通的索引即可。
语句:create index ide_user_email on tb_user(email);