什么是降序索引
大家可能对索引比较熟悉,而对降序索引比较陌生,事实上降序索引是索引的子集。
我们通常使用下面的语句来创建一个索引:
create index idx_t1_bcd on t1(b,c,d);
上面sql的意思是在t1表中,针对b,c,d三个字段创建一个联合索引。
但是大家不知道的是,上面这个sql实际上和下面的这个sql是等价的:
create index idx_t1_bcd on t1(b asc,c asc,d asc);
asc表示的是升序,使用这种语法创建出来的索引叫做升序索引。也就是我们平时在创建索引的时候,创建的都是升序索引。
可能你会想到,在创建的索引的时候,可以针对字段设置asc,那是不是也可以设置desc呢?
当然是可以的,比如下面三个语句:
create index idx_t1_bcd on t1(b desc,c desc,d desc);
create index idx_t1_bcd on t1(b asc,c desc,d desc);
create index idx_t1_bcd on t1(b asc,c asc,d desc);
这种语法在mysql中也是支持的,使用这种语法创建出来的索引就叫降序索引,关键问题是:在Mysql8.0之前仅仅只是语法层面的支持,底层并没有真正支持。
我们分别使用Mysql7、Mysql8两个版本来举例子说明一下:
在Mysql7、Mysql8中分别创建一个表,有a,b,c,d,e五个字段:
create table t1 (
a int primary key,
b int,
c int,
d int,
e varchar(20)
) engine=InnoDB;
然后分别创建一个降序索引:
create index idx_t1_bcd on t1(b desc,c desc,d desc);
创建成功后,我们使用以下sql查看一下索引信息:
show index from t1;
Mysql7中你将得到结果:
Mysql8中你将得到结果:
我们只关心Key_