升mysql创建降序索引引是什么意思

我们通常使用下面的语句来创建┅个索引:

上面sql的意思是在t1表中针对b,c,d三个字段创建一个联合索引。

但是大家不知道的是上面这个sql实际上和下面的这个sql是等价的:

asc表示嘚是升序,使用这种语法创建出来的索引叫做升mysql创建降序索引引也就是我们平时在创建索引的时候,创建的都是升mysql创建降序索引引

可能你会想到,在创建的索引的时候可以针对字段设置asc,那是不是也可以设置desc呢

当然是可以的,比如下面三个语句:

这种语法在mysql中也是支持的使用这种语法创建出来的索引就叫降mysql创建降序索引引,关键问题是:在/zz3/zonghe/fc964.html

当然本文只讲了原理大家一定要知道Mysql中排序利用的B+树,洏不是上面我举例的那种很简单的方式但是就算用B+树原理也是一样的,比较数据的大小而已

还有一点,现在只有Innodb存储引擎支持降mysql创建降序索引引

}

简介:在本教程中您将了解MySQL降mysql創建降序索引引以及如何利用它来提高查询性能。

MySQL降mysql创建降序索引引简介

降mysql创建降序索引引是以降序存储键值的索引在MySQL 8.0之前,您可以DESC在索引定义中指定但是,MySQL忽略了它与此同时,MySQL可以以相反的顺序扫描索引但成本很高。

以下语句创建一个带索引的新表:

从MySQL 8.0开始如果DESC在索引定义中使用关键字,则键值将按降序存储在查询中请求降序时,查询优化器可以利用降mysql创建降序索引引

以下显示了MySQL 8.0中的表结構:

MySQL降mysql创建降序索引引示例

首先,使用不同顺序的四个索引重新创建表t:

其次使用下面的存储过程来插入行到t表:

存储的过程中插入的荇数(rowCount)与之间的值low和high到a和b所述列t表。

让我们10,000在t表中插入行其中随机值介于1和1000之间:

第三,从t表中查询具有不同排序顺序的数据:

按升序排列a和b列中的值:

按升序对a列中的值进行排序按降序对列 b 中的值进行排序:

按降序对a列中的值进行排序,按升序对列 b 中的值进行排序:

按列a和b降序对值进行排序:

在本教程中您学习了如何使用MySQL降mysql创建降序索引引来提高查询性能。

}

而在8.0中对于反向扫描,有一个專门的词进行描述“Backward index scan”

终于不再对group by进行隐式排序

由于降mysql创建降序索引引的引入,MySQL 8.0再也不会对group by操作进行隐式排序

下面看看MySQL 5.7和8中的测试情況

“Using filesort”,代表查询中有排序操作从结果上看,id列确实也是升序输出

不仅结果没有升序输出,执行计划中也没有“Using filesort”

可见,MySQL 8.0对于group by操作確实不再进行隐式排序

从5.7升级到8.0,依赖group by隐式排序的业务可要小心咯

}

我要回帖

更多关于 mysql创建降序索引 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信