MySQL 降序索引
简介:在本教程中,您将了解MySQL降序索引以及如何利用它来提高查询性能。
MySQL降序索引简介
降序索引是以降序存储键值的索引。在MySQL 8.0之前,您可以DESC在索引定义中指定。但是,MySQL忽略了它。与此同时,MySQL可以以相反的顺序扫描索引,但成本很高。
以下语句创建一个带索引的新表:
CREATE TABLE t(
a INT NOT NULL,
b INT NOT NULL,
INDEX a_asc_b_desc (a ASC, b DESC)
);
当您使用SHOW CREATE TABLE在MySQL 5.7,你会发现,DESC如下图所示被忽略:
mysql> SHOW CREATE TABLE t\G;
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`a` int(11) NOT NULL,
`b` int(11) NOT NULL,
KEY `a_asc_b_desc` (`a`,`b`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
从MySQL 8.0开始,如果DESC在索引定义中使用关键字,则键值将按降序存储。在查询中请求降序时,查询优化器可以利用降序索引。
以下显示了MySQL 8.0中的表结构:
mysql> SHOW CREATE TABLE t\G;
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`a` int(11) NOT NULL,
`b` int(11) NOT NULL,
KEY `a_asc_b_desc` (`a`,`b