MySQL8新特性之降序索引底层实现详解
16lz
2021-12-18
什么是降序索引
大家可能对索引比较熟悉,而对降序索引比较陌生,事实上降序索引是索引的子集。
我们通常使用下面的语句来创建一个索引:
create index idx_t1_bcd on t1(b,c,d);
但是大家不知道的是,上面这个sql实际上和下面的这个sql是等价的:
create index idx_t1_bcd on t1(b asc,c asc,d 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);
我们分别使用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);
show index from t1;
Mysql8中你将得到结果:
我们只关心Key_name为idx_t1_bcd的三行记录,细心的你应该可以发现,这两个结果中的Collation字段的结果是不一样的:
- 在Mysql7中,Collation字段的结果为A,A,A,表示b,c,d三个字段的排序方式是asc
- 在Mysql8中,Collation字段的结果为D,D,D,表示b,c,d三个字段的排序方式是desc
但是我们在创建索引的时候,明明在语法层面已经指定了b,c,d三个字段的排序方式是desc,这就可以看出来在Mysql7中降序索引只是语法层面的支持,底层并没有真正支持,并且固定是升序索引。而在Mysql8中则真正从底层支持了降序索引。
更多相关文章
- MySQL系列多表连接查询92及99语法示例详解教程
- Android(安卓)- Manifest 文件 详解
- Android的Handler机制详解3_Looper.looper()不会卡死主线程
- Selector、shape详解(一)
- android2.2资源文件详解4--menu文件夹下的菜单定义
- Android发送短信方法实例详解
- android底层开发
- Android(安卓)读取资源文件实例详解
- 详解Android中的屏幕方向