关于索引的使用
前言
大家好,我是Maybe。最近在学习索引。为大家分享一下索引的创建以及使用索引的注意事项。
如何创建索引
自动创建
当我们为一张表加主键约束(Primary key),外键约束(Foreign Key),唯一约束(Unique)时,MySQL会自动为对应的列自动创建一个索引。
如果表不指定任何约束时,MySQL会自动为每一列生成一个索引并用 ROW_ID进行标识。
手动创建
-- 创建普通索引
-- 创建表时的时候指定主键
CREATE table t_pk1(
id BIGINT PRIMARY key auto_increment,
name varchar(20)
);
show index from t_pk1;-- 创建表的时候单独指定主键列
CREATE table t_pk2(
id BIGINT auto_increment,
name varchar(20),
PRIMARY KEY(id)
);-- 修改表中的列为主键索引
CREATE table t_pk3(
id BIGINT,
name VARCHAR(20)
);
desc t_pk3;
show index from t_pk3;
-- 修改表中的列为主键索引
ALTER table t_pk3 add PRIMARY KEY(id);
alter table t_pk3 add id BigINt auto_increment;-- 创建唯一键的索引
-- 创建表时创建唯一键
CREATE table t_test_1(
id bigint PRIMARY KEY auto_increment,
name varchar(20) UNIQUE
);
desc t_test_1;
show index from t_test_1;-- 修改表中的列为唯一索引CREATE table t_test_2(
id bigint PRIMARY KEY auto_increment,
name varchar(20)
);
ALTER table t_test_2 add unique(name);
show index from t_test_2;-- 普通索引
-- 创建表时创建普通索引CREATE table t_index1(
id bigint PRIMARY key auto_increment,
name varchar(20) unique,
sno varchar(20),
index (sno)
);
desc t_index1;
show index from t_index1;-- 修改表中的列为普通索引
CREATE table t_index2(
id bigint PRIMARY key auto_increment,
name varchar(20) unique,
sno varchar(20)
);
alter table t_index2 add index(sno);
show index from t_index2;-- 单独创建索引并指定索引名
CREATE table t_index3(
id bigint PRIMARY key auto_increment,
name varchar(20) unique,
sno varchar(20)
);
show index from t_index3;
create index idx_t_index3_sno on t_index3(sno);
-- 删除索引idx_t_index3_sno
-- 索引名最好定义为 idx_表名_列名
alter table t_index3 drop index idx_t_index3_sno;
create index idx_t_index3_sno on t_index3(sno);-- 复合索引
-- 创建表的时候指定索引
CREATE table t_index4(
id bigint PRIMARY key auto_increment,
name varchar(20) unique,
sno varchar(20),
class_id bigint,
index (sno,name)
);
show index from t_index4;-- 单独创建索引并指定索引名CREATE table t_index5(
id bigint PRIMARY key auto_increment,
name varchar(20) unique,
sno varchar(20),
class_id bigint
);
show index from t_index5;
create index idx_t_index5_sno_name on t_index5(sno,name);-- 删除主键索引前,必须先将自增列改为非自增
ALTER table t_index5 MODIFY id BIGINT;
alter table t_index5 drop PRIMARY KEY;
show index from t_index5;
-- 删除复合索引
alter table t_index5 drop index idx_t_index5_sno_name;
使用索引的注意事项
结语
再见~希望可以帮助到有需要的人~