mysql常见索引
普通索引
唯一索引
主键索引
组合索引
普通索引:
普通索引仅有一个功能:加速查询
#创建表同时添加name字段为普通索引
create table tb1(
id int not null auto_increment primary key,
name varchar(100) not null,
index idx_name(name)
);
创建表+索引
#单独为表指定普通索引
create index idx_name on tb1(name);
#删除索引
drop index idx_name on tb1;
#查看索引
show index from tb1;
#查看索引列介绍
1、Table 表的名称。
2、 Non_unique 如果索引为唯一索引,则为0,如果可以则为1。
3、 Key_name 索引的名称
4、 Seq_in_index 索引中的列序列号,从1开始。
5、 Column_name 列名称。
6、 Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。
7、Cardinality 索引中唯一值的数目的估计值。
8、Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
9、 Packed 指示关键字如何被压缩。如果没有被压缩,则为NULL。
10、 Null 如果列含有NULL,则含有YES。如果没有,则该列含有NO。
11、 Index_type 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
12、 Comment 多种评注
查看索引 列介绍
唯一索引
唯一索引有两个功能:加速查询 和 唯一约束(可含一个null 值)
#创建表+唯一(unique)索引
create table tb2(
id int not null auto_increment primary key,
name varchar(50) not null,
age int not null,
unique index idx_age (age)
)
创建表+唯一(unique)索引
#创建unique索引
create unique index idx_age on tb2(age);
主键索引
主键有两个功能:加速查询 和 唯一约束(不可含null)
注意:一个表中最多只能有一个主键索引
#创建表 + 创建主键
#方式一:
create table tb3(
id int not null auto_increment primary key,
name varchar(50) not null,
age int default 0
);
#方式二:
create table tb3(
id int not null auto_increment,
name varchar(50) not null,
age int default 0 ,
primary key(id)
);
创建表 + 创建主键
#创建主键
alter table tb3 add primary key(id);
#删除主键
#方式一
alter table tb3 drop primary key;
#方式二:
#如果当前主键为自增主键,则不能直接删除.需要先修改自增属性,再删除
alter table tb3 modify id int ,drop primary key;
删除主键
组合索引
组合索引是将n个列组合成一个索引
其应用场景为:频繁的同时使用n列来进行查询,如:where n1 = '****' and n2 = 123123。
#创建表+组合索引
create table tb4(
id int not null ,
name varchar(50) not null,
age int not null,
index idx_name_age (name,age)
)
创建表+组合索引
#创建组合索引
create index idx_name_age on tb4(name,age);
#索引应用场景
举个例子来说,比如你在为某商场做一个会员卡的系统。
这个系统有一个会员表
有下列字段:
会员编号 INT
会员姓名 VARCHAR(10)
会员身份证号码 VARCHAR(18)
会员电话 VARCHAR(10)
会员住址 VARCHAR(50)
会员备注信息 TEXT
那么这个 会员编号,作为主键,使用 PRIMARY
会员姓名 如果要建索引的话,那么就是普通的 INDEX
会员身份证号码 如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)