mysql按升序创建索引_MySQL 降序索引

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` DESC)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

MySQL降序索引示例

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

DROP TABLE t;

CREATE TABLE t (

a INT,

b INT,

INDEX a_asc_b_asc (a ASC , b ASC),

INDEX a_asc_b_desc (a ASC , b DESC),

INDEX a_desc_b_asc (a DESC , b ASC),

INDEX a_desc_b_desc (a DESC , b DESC)

);

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

DELIMITER $$

CREATE PROCEDURE insertSampleData(

IN rowCount INT,

IN low INT,

IN high INT

)

BEGIN

DECLARE counter INT DEFAULT 0;

REPEAT

SET counter := counter + 1;

-- insert data

INSERT INTO t(a,b)

VALUES(

ROUND((RAND() * (high-low))+high),

ROUND((RAND() * (high-low))+high)

);

UNTIL counter >= rowCount

END REPEAT;

END$$

DELIMITER ;

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

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

CALL insertSampleData(10000,1,1000);

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

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

EXPLAIN SELECT

*

FROM

t

ORDER BY a , b; -- use index a_asc_b_asc

这是输出:

+----+-------------+-------+------------+-------+---------------+-------------+---------+------+-------+----------+-------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+-------+------------+-------+---------------+-------------+---------+------+-------+----------+-------------+

| 1 | SIMPLE | t | NULL | index | NULL | a_asc_b_asc | 10 | NULL | 10192 | 100.00 | Using index |

+----+-------------+-------+------------+-------+---------------+-------------+---------+------+-------+----------+-------------+

1 row in set, 1 warning (0.03 sec)

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

EXPLAIN SELECT

*

FROM

t

ORDER BY a , b DESC; -- use index a_asc_b_desc

输出是:

+----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-------------+

| 1 | SIMPLE | t | NULL | index | NULL | a_asc_b_desc | 10 | NULL | 10192 | 100.00 | Using index |

+----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-------------+

1 row in set, 1 warning (0.01 sec)

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

EXPLAIN SELECT

*

FROM

t

ORDER BY a DESC , b; -- use index a_desc_b_asc

以下说明输出:

+----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-------------+

| 1 | SIMPLE | t | NULL | index | NULL | a_desc_b_asc | 10 | NULL | 10192 | 100.00 | Using index |

+----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-------------+

1 row in set, 1 warning (0.42 sec)

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

EXPLAIN SELECT

*

FROM

t

ORDER BY a DESC , b DESC; -- use index a_desc_b_desc

以下显示输出:

+----+-------------+-------+------------+-------+---------------+---------------+---------+------+-------+----------+-------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+-------+------------+-------+---------------+---------------+---------+------+-------+----------+-------------+

| 1 | SIMPLE | t | NULL | index | NULL | a_desc_b_desc | 10 | NULL | 10192 | 100.00 | Using index |

+----+-------------+-------+------------+-------+---------------+---------------+---------+------+-------+----------+-------------+

1 row in set, 1 warning (0.01 sec)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python开源项目新手_10大Python开源项目推荐(Github平均star2135)

翻译 | suisui出品 | AI科技大本营(公众号ID:rgznai100)继续假日充电系列~本文是 Mybridge 挑选的 10 个 Python 开源项目,Github 平均star 2135,希望你能够喜欢~~▌Rank 1:Requests-HTML v0.9(7385 stars on Github,来…

layer中嵌套的页面如何操作父页面_vue中8种组件通信方式,值得收藏

有不少网友提出组件之间通信方式还有很多, 这篇文章便是专门总结组件之间通信的vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 首先我们需要知道在vue中组件之间存在什么样的关系, 才更容易…

镜头视场角计算工具_再谈远心镜头的设计及其独特的性能

1.远心镜头的设计与对比镜头可以分为非远心和远心;远心镜头也可以分为物方远心、像方远心和双远心。相关概念的简单说明:孔径光阑在物空间的像称为入射光瞳。同样,孔径光阑被其后面的光学零件成在像空间的像,称为出射光瞳。入射光…

收到一个机器人txt微盘_经阁-第一章 吞了个机器人-爱阅小说网

第一章 吞了个机器人莫金无奈的感叹着自己的命运,八岁之前他乞讨为生,之后遇到好心人收养,没想到五年后他又要开始无父无母的生活了。只是这下他身后还有个拖油瓶的妹妹。义父、义母穷苦了一辈子,临了也没给莫金留下丁点儿值钱的东…

高斯核函数python代码_单类SVM:SVDD

话接上文(SVM的简单推导),这篇文章我们来看单类SVM:SVDD。可能大家会觉得很奇怪,我们为什么需要单分类呢?有篇博客举了一个很有意思的例子。花果山上的老猴子,一生阅猴无数,但是从来没有见过其它的物种。有…

collector list 多个分组_【S01E07】groupby方法、GroupBy对象、groupby方法的分组键

Hadley Wickham(许多热门R语言包的作者)创造了一个用于表示分组运算的术语"split-apply-combine"(拆分-应用-合并),这个词很好的描述了整个过程。分组运算的第一个阶段,pandas对象(无…

清理垃圾代码bat_来买个小内存u盘么咯?盘内带电脑垃圾清理.bat那种丨heibai.org...

在某宝个别店铺购买了小内存u盘到货后插入电脑,发现自带了一个名为电脑垃圾清理的小程序。对就是这货怀揣着这家店真好,还带了垃圾清理软件的想法,我试着运行了软件.但是好像没有卵用.正好小表弟好像对这个比较了解,我去问问他咋回…

射灯安装方法图解_家居射灯怎么选?第三代宜美SMD射灯给你正解

前段时间,刚把自己的房子完成硬装,在灯具选择的过程中,家人的意见就不太统一。其父母觉得选灯只要够亮就行,而媳妇觉得选灯选贵的才行。到底谁的选灯方法好呢?其实家人们的建议并不是完全不对,灯够亮只是其…

c标签判断true false jsp_北京尚学堂卓越班252天[第042天]——Jsp

1. JSP的核心运行原理1) 客户端浏览器发送请求到服务器,访问a.jsp文件。http://localhost:8989/应用名/a.jsp2) 服务器端接收到请求后所做的处理a) 创建request和response两个对象b) 根据请求中的应用名找到该应用下面的web.xml文件,发现该应用的配置文件…

js aes加密_某高考咨询网js逆向分析笔记

一、某高考资讯网逆向分析某网站的js加密分析,安全签名signsafe HmacSHA1 AES一年前分析过网站数据还没有加密,最近需要获取新的数据发现原先的爬虫失效,请求和响应都经过加密。于是重新分析,记录下分析思路以及分析过程中遇到的…

python语言发明者 google_看看9种编程语言的发明者是怎么说的

从Node.js到C,看他们的发明者是如何评价他们的语言的未来。Ryan Dahl:Node.js问:它的主要优势是什么?Dahl:Node与其他的语言有一点明显的区别,就是处理I/O。所以它永远不允许用户锁上程序。它要求用户不断的…

opencv 的norm_22、OpenCV用卷积Filter2D进行滤波器

迄今为止,看到的函数中,卷积的操作发生在OpenCV函数的内部。理论上,图像卷积就是将内核与图像覆盖区域对应位置相乘之后求和。从调用函数上来看,它需要一个数组参数来描述内核。在实践层面,有一个重要的微妙因素会对结…

初学python有几个阶段_零基础如何系统的学习Python 从7个阶段入手

目前信息化产业发展势头很好,互联网就成为了很多普通人想要涉及的行业,因为相比于传统行业,互联网行业涨薪幅度大,机会也多,所以就会大批的人想要转行来学习Python开发。Python语言的应用Python是它们的主流语言&#…

glide加载gif图不显示动画_用Python绘制会动的柱形竞赛图

我们经常看到的Bar Chart Race(柱形竞赛图),可以看到数据的呈现非常的直观。今天就一起来学习下如何生成和上面一样的柱形竞赛图。1、导入Python库2、加载数据集这里使用的是城市人口数据集,加载我们想要的数据:其中&a…

python做后端开发的优点_【后端开发】python语言的特点是什么

python语言的特点是什么?python语言的特点简单Python是一门简单而文字简约的语言。阅读好的Python程序感觉就像阅读英语,尽管是非常严格的英语。Python的这种伪代码特性是其最大强项之一,它可让你专注于解决问题的办法而不是语言本身。容易学…

rust队友开挂_腐蚀RUST开挂玩家识别方法 如何识别玩家开挂

远程查挂是最无奈的选择,也是最后的办法,遇到一些会隐藏的你也查不到。附体附体附体!!这是唯一的方法!!附体是最好的选择,当然gm必须有丰富的游戏经验,800小时以下的玩家不适合做gm(除非有老师傅带)。下面说说如何对付只开透视的老…

不冲突的端口范围_网络中IP地址发生冲突故障怎么办

——————欢迎新老朋友们加入微信群,方便技术讨论,信息互通,行业交流:智能弱电行业专家群;智能弱电行业技术群;智能弱电行业信息群;申请加入请加小编微信:15537112161———————有朋友提…

项目结构_组织结构对项目影响系列课程---项目式组织结构

在前面的几篇文章中我们分别介绍了,系统型(简单型),职能型,弱矩阵,平衡矩阵,强矩阵结构的优点和缺点及它们带给项目的影响。今天我们介绍项目式组织结构的优点和缺点及其可能产生的影响。从结构…

第三范式的作用_钟启泉:教学范式的转型,让一线教师面临三大挑战 | 头条

培育“核心素养”的方法论——能动学习真实性的学习境脉所谓“能动学习”是“基于学习者的主体性参与与学习者之间能动的交互作用的学习而产生的”。它不是单纯记忆知识的学习,而是指学习者能够活跃地应对种种课题,并富有实感支撑的学习。基于“核心素养…

云服务器 管理控制台_关于小白如何初步管理自己的云服务器

博主在刚刚接触云服务器的时候,买的云服务是Linux系统的,反正是一脸懵,后来找了很多资料。所以博主认为步骤主要为以下几步第一步:如果买的是Linux系统将其重装成windows系统。以腾讯云服务器为例1.点击右上角的控制台2.进入买的云…