order by使用索引列排序时会失效吗?

索引优化:提升排序、GROUP BY性能 索引使用,及优化策略 阅读详情

order by使用索引列排序时会失效吗?
在使用order by对某列进行排序时, 其sql一定进行了多表联查的操作. 说白了肯定做了表关联. 既然有表关联, 那order by排序就可以对任意的表进行排序. 那么应该对那个表进行排序好点呢?

先说结论, order by后面跟的索引列只是对 驱动表才起作用, 也就是说如果是对驱动表进行排序, 那么order by后面的索引是起作用的, 但是如果order by后面跟的排序字段不是驱动表的, 那么这时索引是不起作用的.

问题来了 , 什么是驱动表?
在进行多表联查时, sql执行时会先查出一个表中符合查询条件的数据,然后再用这些条件去匹配另一个表中的符合条件的数据 , 合并后的数据就是我们要的结果集. 那么先查出来结果集的这个表就是驱动表.

问题又来了, 谁有资格做驱动表?
答: 谁查出来符合条件的数据量少, 谁就最有资格做驱动表. 这里为什么只说最有资格做? 而不是一定做?
因为当用户使用 left join , right join 指定了驱动表时, 以用户指定的表作为驱动表. (关键字左边的表时驱动表) , 当用户使用join 或者 , 没有指定驱动表时, 由数据库自己挑出一个结果集最少的表作为驱动表. 如果用户使用left join指定了一个查询出来数据量很大的表作为驱动表时, 那就很糟糕了.

order by索引排序的失效与不失效?
如果order by 后的排序字段用的是驱动表的排序字段, 那么这个字段的索引是不失效的, 效率高.
如果order by 后的排序字段用的不是驱动表的字段 , 那么索引不会起作用, 数据库会将驱动表查出来的数据和其他表进行关联, 关联后的结果集创建一个临时表进行存储, 然后对这个临时表按非驱动表的列进行排序 ,这样sql效率会变慢.

编写一个期货跨期套利的程序,谈谈思路及案例 🏆本文收录于《优快云问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 阅读详情

相关推荐

自研半导体Fab缺陷分析系统:从Klarf解析到Defect Map可视化的实战替代方案

本文分享了自研半导体Fab缺陷分析系统的实战经验,重点解析了Klarf文件格式与坐标系转换的核心技术,并详细介绍了从数据解析到Defect Map可视化的完整实现路径。该系统旨在为成本敏感或追求技术自主的团队提供一套功能完备的Klarity Defect平替方案,有效降低对昂贵商业软件的依赖,实现缺陷数据的自主分析与可视化。

y7z8a的博客 705

order by一定会导致索引失效吗?

第一条语句它的执行过程是先去取出所有数据,然后根据bcd进行排序,或者,之前已经建立了bcd索引,先走bcd索引,然后再回表出查询全部数据,这种方法就不需要排序了,只需要根据主键id回表取数据就行,但是比第一种多了回表的动作,且不说两种方法的效率如何(需要看数据量),这条语句的两种执行流程都是要进行全表扫描的。第二条语句,它只需要bcd的数据,而且已经建立了bcd为顺序的索引,那么你select b,c,d和order by b,c,d都可以满足使用它索引的条件,那么MySQL当然会走索引了。

guliudeng的博客 2474

Coze工作流实战:Coze一键生成沉浸式历史故事视频

【coze工作流实战】一键生成火爆的沉浸式历史故事视频!短短3分钟,顶替你3天的工作量!

bickys的博客 1004

order by 索引是否一定会走索引

order by 索引是否一定会走索引和优化问题。

Fanzongshen的博客 9374

第3.4章 机器人第三方库实战总结(四):G2O优化库从入门到实战(附SLAM实例代码)

自定义边同样是满足复杂应用需求的重要手段。自定义边时,需要明确边所连接的顶点类型以及边所表示的误差项的计算方式。假设我们要定义一条边,用于约束两个上述自定义顶点之间的相对位姿和传感器偏移量关系。我们可以这样定义边类:public:// 计算误差// 计算雅可比矩阵// 读盘和存盘函数,这里暂不实现。

行知SLAM 357

用生成式AI自动生成测试用例的完整教程

本文旨在帮助测试工程师、开发人员快速掌握“生成式AI自动生成测试用例”的核心技术,覆盖从概念理解、工具选择到实战落地的全流程。无论是Web应用、API接口还是移动端功能测试,你都能找到可复用的方法。本文将按照“概念→原理→实战→避坑”的逻辑展开:先通过生活案例理解生成式AI如何生成测试用例,再拆解核心算法原理,接着用Python代码演示完整生成流程,最后分享实际应用中的优化技巧和未来趋势。生成式AI:能“创造内容”的AI模型(如ChatGPT、CodeLlama),像会写作文的智能笔。测试用例。

AIGC应用创新大全的博客 1580

mysql order by 索引问题综合分析

一,文章1总结:0,索引 与 查询条件 与 排序字段关系,Using filesort出现场景1.联合索引,最左匹配原则,不仅查询条件需要遵循,排序也需要遵循,查询+排序组合也要遵循2.extra 避免出现filesort,使用index排序3.关于排序算法,内存排序 还是 磁盘排序,缓冲区大小4.结论中,举例了,最左匹配的成功与否样例二,文章2此文主要说明以下问题1.为什么order by要加索引,从以下几个方面说明explan 是否使用索引key,扫描行数rows,extra优化。

C18298182575的博客 3009

Qt应用软件【协议篇】自定义协议处理串口半包贴包

Qt串口数据,半包,贴包,丢包数据处理

小鱼酱的博客 1209

mysql索引失效

某些查询的时候没有办法使用索引 比如下面的例子 ,因为没有办法使用数据结构 ,索引一般是hash或者btree结构,比如我们一般用某种数据结构二分法查询一个值,可以查到。但是我们查询一个结果,用二分法要求查询不属于某些值的,就没有办法使用数据结构,就使用不了索引。所以核心就是判断一个sql语句能不能通过数据结构来查询出结果,能查询出来就是能够使用索引,不能查询出来就是不能使用索引。,该索引失效,只有当or左右查询字段均为索引时,才会生效。,导致不能命中索引,引发失效。,导致不能命中索引,引发失效。

weixin_47796247的博客 4187

LPDDR6来了!到底比LPDDR5/5X强在哪?从速度到总线,技术细节一次说清!

LPDDR6不仅仅是速度快点、位宽大点那么简单,它是一次架构级的革新,从引脚、总线、时钟管理到Burst协议全部升级。🎯我们正在迈入一个“AI优先”的时代,内存架构也必须跟上。对于做芯片、做整机、做系统的你,理解LPDDR6的技术变化,提前规划测试方案,是现在就该启动的动作!

weixin_43199439的博客 1278

WPF中使用TreeView封装组合控件TreeView+DataGrid

wpf的功能非常强大,很多控件都是原生的,但是要使用TreeView+DataGrid的组合,就需要我们自己去封装实现。功能如上图所示, 目前基本上把常用的样式都实现了,购买源码后,可以自行修改样式。本文源码效果如下,(搞了好几天,的确有难度,所以源码也收费,便宜,赚点辛苦费)第一种:技术的选择是TreeView(也就是本文的演示)。这2个图都是第三方控件自带的,并且都是收费使用。首先说明一下,实现上面的效果,有3种方法。本文演示的是使用TreeView的实现。第二种:技术的选择是DataGrid。

故里2130 1650

Mysql-索引失效 order by优化

Mysql-索引失效 order by优化 索引失效 最佳左前缀法则 如果索引了多列 要遵循最佳左前缀法则 指从查询索引的最左前列开始并且不跳过索引中的列 不在索引列上做任何操作 会导致索引失效而转向全表扫描 不能使用索引中范围条件右边的列 尽量使用覆盖索引 在使用不等于(!=或者<>)的时候 无法使用索引会导致全表扫描 is null 和is not null也无法使用索引 lile以通配符开头 会造成索引失效变成全表扫描

zyk1.的博客 1万+

【软考高级架构】论文范文17——论软件系统架构评估及其应用(ATAM)

软件系统架构评估是保障系统质量属性满足业务目标的关键环节,架构权衡分析方法(Architecture Trade-off Analysis Method,ATAM)作为一种主流的架构评估方法,通过场景识别、敏感点与权衡点分析、风险与非风险决策识别等系统化活动,能够在架构设计早期发现潜在问题,降低后期修改成本。本文以笔者主导的某省级智慧医疗平台架构评估项目为案例,围绕ATAM方法的应用展开论述。笔者担任系统架构师,负责组织评估团队、引导场景捕获、分析架构决策、识别风险与权衡点。

qq837993702的博客 489

order by、group by也会使用索引?使用这俩关键字的时候索引什么时间会失效

目录 写在前面 初始化语句 orderby索引分析 总结 groupby 写在前面 我们都知道,索引可以提高查询和排序的速度。 所以,orderby做排序的时候,显然是可以使用索引的。 groupby做分组也会用到索引吗? 关于查询时索引失效场景的验证,请参考这篇文章:MySQL索引失效的场景,什么情况下会造成MySQL索引失效 初始化语句 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_...

秃了也弱了 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MySQL高级- group by ,order by 索引优化

一:索引失效             1、              2、最佳左前缀法则                4、            8、                       使用覆盖索引解决这个问题。                        二、索引优化     1、ORDER BY 子句,尽量使用Index方式排序,避免使用File...

liaonanfeng88的优快云博客 9061

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

mysq order by 不走索引问题

问题描述 今天遇到一个问题,在一个报表导出的功能中,需要导出用户的某些记录的所有数据,有些用户有多达10万的记录,导出过程非常慢,需要10多秒。经过排查,发现是查询数据库的时候的问题,查询数据居然用了7秒左右。起初看到sql没发现什么问,sql写得中规中矩,只查询需要的列,使用索引,遵循索引规则等等,但是他就是要那么长时间。 问题分析 表面上看不出问题,那只能用explain大法来分析分析了, 原...

leoss的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

MySQL排序(Order By)为什么要使用索引

MySQL排序(Order By)为什么要使用索引 1. WHERE条件句中使用索引 以查询一条程咬金 记录为例: 创建索引 先创建一个二级索引 不选择索引字段做条件查询 key=null 执行计划中没有用到索引 rows=69 全表扫描 使用索引字段作为条件查询 key=name_index 使用到索引name_index rows=1 对比结论 在选条件语句中不加索引字段,索引会失效,包括聚簇索引。 使用的索引避免了全表扫描 2. Ord...

轩1024的博客 1万+

MySQL高性能的索引策略(2):索引排序、索引下推、常见索引失效情况

详细介绍了各种高性能的索引使用策略,比如索引排序、索引下推、压缩索引等等,以及常见索引失效的情况。

终生学习践行者 2888

使用索引优化提升排序、GROUP BY和分页性能

好处:1. 避免Innodb表进行索引的二次查询(回表)Innodb是以聚集索引的顺序来存储的,对于Innodb来说,二级索引在叶子节点中所保存的是行的主键信息,如果是用二级索引查询数据,在查找到相应的键值后,还需通过主键进行二次查询才能获取我们真实所需要的数据。2. 可以把随机IO变成顺序IO加快查询效率由于覆盖索引是按键值的顺序存储的,对于I0密集型的范围查找来说,对比随机从磁盘读取每一行的数据IO要少的多,因此利用覆盖索引在访问时也可以把磁盘的随机读取的IO转变成索引查找的顺序IO。

weixin_57256621的博客 871

数据库SQL索引什么时候会失效

对于创建的多列索引(复合索引),不是使用的第一部分就不会使用索引 alter table student add index my_index(name, age) // name左边的列, age 右边的列 select * from student where ...

cuibw 1万+

mysql按升序创建索引_MySQL数据库ORDER BY优化总结(为排序使用索引)

在使用order by时,经常出现Using filesort,所以对于此类sql语句我们需要去尽力优化,使其尽量使用Using index。那么,我们对于这类型的语句我们怎么去做优化呢?因为这一块还是比较容易混淆的,所以我弄了个实验,相信大家跟我一起做下实验就都能理解了~1. 环境准备droptableifexiststest;createtabletest(idintprima...

weixin_35952427的博客 2034

union和子查询中order by一起使用导致排序失效问题

一、前言 分页查询的需求如同家常便饭,多数情况下主要利用order by和limit即可实现,有些稍复杂一点的可能需要用到union操作去连接多个子查询结果集。然而这三个操作是有一些需要留意的问题,下文将列举出3个可能碰到的情况。 MySQL版本:5.7.21 union和子查询中order by一起使用导致排序失效的问题

天天向上 4298

MYSQL中索引失效的场景

"Using index condition" 表示 MySQL 在查询过程中可以利用索引来进行数据过滤,但还是需要访问数据表的行(而不是完全通过索引获取所有信息)。这是 MySQL 查询优化中的一种情况。然后这里简单说一下 "using index" 和 Using index condition 的区别Using index:表示查询可以完全通过索引来获取数据,不需要访问数据表的行(即 "索引覆盖")。这种情况性能较好,因为只访问了索引,没有读表。

cccccclllllll_的博客 1183

MySQL使用索引排序

前言 过去我们只知道使用ORDER BY来做排序,那么本章将来介绍MySQL使用索引进行排序,MySQL实现排序共有两种手段,第一种就是通过排序操作,第二种就是通过索引来排序。(关于查询语句中有没有使用带索引排序我们可以通过EXPLAIN执行计划得到type列的值为index,则说明使用到了索引来排序) 支持 MySQL可以使用同一个索引满足排序(ORDER BY)和查询(WHERE)操作,因此如果可以,设计索引的时候尽可能考虑同时满足两种任务 可能更慢 扫描索引本身就很快,因为只需要从一条索引记录移动到紧

程序员劝退师的博客 6725

索引失效的几种情况

当查询条件涉及到order by、limit等条件时,是否走索引情况比较复杂,而且与Mysql版本有关,通常普通索引,如果未使用limit,则不会走索引。order by多个索引字段时,可能不会走索引。建立这个联合索引相当于建立了 (id),(id,username),(id,username,age)这一组索引,按照最左匹配原则,所以只要sql语句中没使用以上组合中的列,就会导致索引失效。=“作为条件查询,有可能不走索引,但也不全是,当查询结果集占比比较小时,会走索引,占比比较大时不会走索引。

flankkuke的博客 1711

索引失效的10个场景

虽说name是联合索引的第三个字段,但根据最左匹配原则,该sql语句依然能走索引,因为最左边的第一个字段code,在where中使用了。只不过order by的时候,排序效率比较低,需要走一次。order by后面如果包含了联合索引的多个排序字段,只要它们的排序规律是相同的(要么同时升序,要么同时降序),也可以走索引。id字段本身是有主键索引的,同时height字段也建了普通索引的,并且两个字段都是int类型,类型是一样的。查询所有列的数据,大概率会查询非索引列的数据,非索引列不会走索引,查询效率非常低。

m0_62986746的博客 2340
上一篇: 主键生成策略
下一篇: docker 安装 nginx
libingbojava
博客等级 码龄9年 64粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值