MySQL的 select 和 sort 变量

总是会忘记 status 中 Select% 的那几个变量的具体含义,这次干脆写下来以便日后查询。
主要有这9个变量。
1. Select_scan
2. Select_range
3. Select_full_join
4. Select_range_check
5. Select_full_range_join
6. Sort_scan
7. Sort_range
8. Sort_merge_passes
9. Sort_rows
其中 Select_scan 和 Select_range 包括了单表查询和多表联接查询中的第一个表。Select_full_join, Select_range_check 和 Select_full_range_join 用于多表联接查询中的第二张及之后的表。Sort 的那几个变量则用于任何需要排序的查询。

Select_scan
代表了需要做全表扫描。在 explain 中 type 会显示为 ALL,原因是查询没有能用到索引。因为全表扫描一般比较慢,所以应该尽量避免。

Select_range
代表需要从硬盘读表在一段范围内的行。在 explain 中显示为 range,说明使用了索引查找记录在硬盘上的位置。

Select_full_join
和 Select_scan 差不多,区别是 Select_full_join 代表的是第二张及之后的表。explain 中的类型也是 ALL,原因是表联接所用的字段上没有索引。它对性能有更为严重的影响,绝对要避免,所以用于联接的字段上一般都要加索引。

Select_range_check
这个比 Select_full_join 要好一点,和 Select_range 差不多。区别是 MySQL 不能确定它是否能否使用一个范围来做联接。如果可以那么会使用范围,如果不行仍会使用全表扫描。在 explain 中 type 也会是 ALL,但 extra 中会有 Range checked for each record (index map: ) 的说明。不能肯定是否能用范围是因为联接是条件不确定。如:
SELECT * FROM tbl1, tbl2 WHERE tbl1.col1 > tbl2.col1
如果 tbl2.col1 上有索引,那么可以做 Select_range_check,explain的结果如下
   mysql> EXPLAIN SELECT * FROM tbl1, tbl2 WHERE tbl1.col1 > tbl2.col1;
+-------------+-------+------+---------------+------+---------+------+------+------------------------------------------------+
| select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+-------------+-------+------+---------------+------+---------+------+------+------------------------------------------------+
| SIMPLE | tbl1 | ALL | NULL | NULL | NULL | NULL | 27 | |
| SIMPLE | tbl2 | ALL | col1 | NULL | NULL | NULL | 18 | Range checked for each record (index map: 0x1) |
+-------------+-------+------+---------------+------+---------+------+------+------------------------------------------------+

如果链接 tbl2 的时候 MySQL 判断可以使用范围查找,它仍然会增加 Select_range_check 而不是 Select_range。

Select_full_range_join
和 Select_range_check 类似,不过 MySQL 可以肯定它能够使用范围查找。这时 explain 中的类型是 range。这是联接中最好的情况。

Sort_scan 和 Sort_range
查询做排序,不论是因为 order by 还是 group by(除了使用了 order by NULL 的 group by),主要都是下面的三步:
1. 通过 where 条件找到记录
2. 排序
3. 按排好的顺序读取记录
如果第二步不被跳过,那么第三步中就会有 Sort_scan 或 Sort_range。如果第一步是 Select_scan,那么第三步将是 Sort_scan,如果第一步是 Select_range,那么第三步会是 Sort_range。但 Sort_scan 和 Sort_range 其实没有功能上的区别,都是将需要的记录按顺序读出来,所以性能也是一样的。

Sort_merge_passes
Sort_merge_passes 包括两步。MySQL 首先会尝试在内存中做排序,使用的内存大小由系统变量 Sort_buffer_size 决定,如果它的大小不够把所有的记录都读到内存中,MySQL 就会把每次在内存中排序的结果存到临时文件中,等 MySQL 找到所有记录之后,再把临时文件中的记录做一次排序。这再次排序就会增加 Sort_merge_passes。实际上,MySQL 会用另一个临时文件来存再次排序的结果,所以通常会看到 Sort_merge_passes 增加的数值是建临时文件数的两倍。因为用到了临时文件,所以速度可能会比较慢,增加 Sort_buffer_size 会减少 Sort_merge_passes 和 创建临时文件的次数。但盲目的增加 Sort_buffer_size 并不一定能提高速度,见 How fast can you sort data with MySQL ?

Sort_row
这代表了在第二步中被排序的记录的总数。因为 Sort_range 和 Sort_scan 是一样的,所以这个值只是说明了有多少记录被排序,意思不大。
MySQL排序内存溢出:JSON字段与sort_buffer_size的优化策略 本文深入分析了MySQL排序内存溢出(Out of sort memory)的常见原因,特别是JSON大字段与sort_buffer_size的交互影响。文章从一次真实告警入手,揭示了MySQL 8.0.20后排序策略的变化,并提供了查询优化、索引设计、数据模型瘦身及参数精细调整等治本策略,帮助开发者从根本上解决排序性能瓶颈。 阅读详情

相关推荐

MySQL单表的访问方法和连接的原理

MySQL的SQL查询语句对表的访问或者是查询可以有多种方式,每种方式执行的成本、花费的时间大不一样,MySQL定义了很多种表的访问方式或者叫访问类型来。通过主键索引或者唯一二级索引和常数值进行查询的时候因为目标结果是唯一确定的,MySQL认为这种查询效率十分高,成本消耗几乎忽略不计,这种访问方式定义为常数级访问const。通过二级索引和常数值进行查询的时候,扫描区间是一个单点区间,MySQL讲这种查询方式定义为ref访问类型。这种类型是ref的一种特殊存在,区别是它多了一些扫描Null值的扫描区间。如果查

Minor的Java技术博客 780

sort函数怎么用mysql_实例详解sort()函数的原理和使用方法

本文主要为大家分享一篇实例详解sort()函数的原理和使用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。sort()方法就是对数组按照一定的条件进行排序。在不带参数的情况下sort()方法默认会将数组元素当作string类型来升序排序,根据它们的unicode码从小到大依次排列.如果想按照自己的条件进行排序,需要传一个比较函数。如下:var arr = [...

weixin_30767863的博客 2976

【电力系统】高压直流输电VSC-HVDC,四个变流站联合输电 / 交直流混合并网系统

本文研究了一种基于电压源型换流器(VSC)的高压直流输电(HVDC)系统,该系统通过四个变流站实现联合输电并接入交直流混合电网。文章介绍了系统的结构、工作原理以及控制策略,分析了交直流混合并网的特性,并通过仿真验证了系统的性能。结果表明,该系统具有良好的稳定性和灵活性,能够有效实现多点供电和功率协调。

2401_84610415的博客 2241

mysql一对多 排序后取第一条_MySQL 排序的艺术

前言业务中的各种查询通常对应了用户所看到的各项列表,列表一般是根据某个维度进行排序。换句话说,业务中使用 SELECT 语句的时候除了不可避免的搭配 WHERE 以外,还会配合 ORDER BY 进行使用。今天来好好聊聊 MySQL 的 ORDER BY 排序。排序算法说到排序算法,有插入排序、选择排序、归并排序、堆排序、快速排序、计数排序、桶排序、基数排序、冒泡排序、希尔排序、梳排序 ...

weixin_29529047的博客 2911

Lumerical官方案例、FDTD时域有限差分法仿真学习(三)——环形谐振器(Ring resonator)之第一部分

环形谐振器教程的第 1 部分使用 MODE 来设计和仿真环形谐振器。 自由光谱范围 (FSR) 和品质因数 (Q 因数) 是这种面向片上通信应用的基于绝缘体上硅 (SOI) 波导设计的关键性能指标。

weixin_45719141的博客 3万+

网络系统实现技术之IPX与SPX

IPX/SPXNovell NetWare网络Novell公司为适应网络发展,将主机网络转换为PC网络,开发了Novell NetWare网络系统。该系统中基于客户机/服务器模式。以普通PC机做为客户机,以性能强大的服务器做为服务器,为客户机提供文件服务、数据库服务及其他服务。与前面的SNA模型一样,Novell NetWare也早于OSI模型,所以不能与OSI模型严格对应,但也有很明

成片的大树 9164

MySQL:排序(filesort)详细解析(8000字长文)

导读:作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列文的作者。想阅读八怪源码文章欢迎订阅本文建议横屏观看,效果更佳能力有限有误请指出。本文使用源码版本:5.7.22引...

老叶茶馆 1228

GD32F450以太网(1):ETH 外设接口简介

GD32F450以太网ETH MAC外设接口简介

Zhichao_Zhang的博客 1万+

mysql sort 性能优化

通过一些常用的查询语句分析方法,对查询语句进行优化。1,explain,这个绝对是神器。在一个select语句前添加explain,会得到以下内容id  select_type table  type  possible_keys  key   key_len    ref   rows    Extra1 SIMPLE    a   ALL null        null   null ...

现役码农的博客 722

IC设计效率翻倍!Verilog-mode的AUTOWIRE/AUTOINST组合使用技巧

本文详细介绍了在Emacs的verilog-mode插件中,如何组合使用AUTOWIRE与AUTOINST功能,实现Verilog代码的智能自动化连接与维护。通过声明式编程思想,该组合能自动生成模块实例化连接和线网声明,并配合AUTO_TEMPLATE处理复杂映射,从而大幅提升IC顶层设计的效率和可靠性,减少手动连线的错误。

weixin_28826545的博客 320

一次搞定 SAP IDoc 失败重处理与安全清理:BD87 实战指南

本文介绍了SAP IDoc错误处理的BD87实战指南。主要内容包括: BD87的核心功能:监控IDoc处理状态并支持人工重处理或标记删除,适用于入站/出站IDoc故障处理。 重处理前的关键步骤: 区分技术错误与业务错误 检查是否允许重复处理 确认日期范围设置正确 标准操作流程:通过BD87选择错误IDoc节点执行重处理,特别适用于状态51的应用错误。 标记删除操作:将无用IDoc标记为可清理状态,后续可通过WE11物理删除或归档处理。 常见问题解决方案:包括权限控制、批量处理优化建议以及自动化定位工具的开发

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 458

select scan mysql_?MySQL的 select 和 sort 变量

主要有这9个变量。Select_scanSelect_rangeSelect_full_joinSelect_range_checkSelect_full_range_joinSort_scanSort_rangeSort_merge_passesSort_rows其中 Select_scan 和 Select_range 包括了单表查询和多表联接查询中的第一个表。Select_full_join...

weixin_33670167的博客 823

在 PFCG 中完成 SAP Fiori 对象分配:把 Business Catalog、Space、Page 与授权一次讲透

摘要:SAP Fiori权限配置的关键在于理解Business Catalog与Space的分层授权逻辑。传统SAP GUI中直接分配事务码的方式不适用于Fiori环境,必须通过PFCG为角色分配Catalog(提供应用访问权限)和Space(控制首页展示结构)。Catalog会自动解析所需OData服务授权,而Space则决定用户在Launchpad中看到的导航布局。常见错误包括直接分配Page而非其所属Space,或仅配置Space而忽略Catalog。最佳实践是优先使用Catalog驱动授权提议,再在

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 327

mysql定义变量

MySQL存储过程中,定义变量有两种方式: 1.使用set或select直接赋值,变量名以 @ 开头. 例如:set @var=1; 可以在一个会话的任何地方声明,作用域是整个会话,称为用户变量。 2.以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如: DECLARE var1 INT DEFAULT 0; 主要用在存储过程中,或者是给存储传参数中。

u011649691的博客 3万+

YOLO系列专栏(十二):YOLO26行业落地实战(三):无人机航拍场景——户外巡检(机载边缘计算+YOLO26)

无人机航拍巡检场景,面临机载设备算力/显存有限、高空航拍目标小、户外环境复杂(风力、光线变化)、图像抖动等问题,对模型的轻量化、实时性、小目标检测能力要求极高。YOLO26相比传统模型,在该场景中具备三大核心优势:✅ 极致轻量化:INT8量化+模型剪枝后,模型体积可压缩至5MB以内,显存占用控制在512MB以内,适配Jetson Xavier NX等机载边缘计算设备;✅ 小目标检测能力强:优化检测头与锚框配置,可精准识别高空航拍中的小尺寸目标(如线路断股、绝缘子裂纹),检测准确率高;

qq_36130719的博客 261

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MySQL ORDER BY 排序性能优化:彻底搞懂 filesort 与索引调优

数据库慢查询是后端性能调优的永恒主题,其中ORDER BY排序操作尤为常见。当索引无法直接提供有序数据时,MySQL会触发filesort机制,在sort_buffer_size限定的内存区域内完成排序,内存不足则借助磁盘临时文件归并完成。理解这两条执行路径的原理,是优化排序性能的前提。在分页查询、报表统计、榜单生成等高频业务场景中,通过联合索引设计消除filesort、精简SELECT字段降低排序行宽、合理配置排序缓冲区参数,能够显著提升查询响应速度。系统性地掌握索引优化、查询改写与参数调优的完整方法,才

weixin_42525385的博客 233

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

MYSQL的用户变量(@)和系统变量(@@)

转自: http://dev.mysql.com/doc/refman/5.1/zh/language-structure.html#variables 9.3. 用户变量 可以先在用户变量中保存值然后在以后引用它;这样可以将值从一个语句传递到另一个语句。用户变量与连接有关。也就是说,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将

静宁宇思 588

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MySQL Select and Sort Status Variables

Hack MySQL ‹ MySQL Select and Sort Status VariablesBlog    Contact    SitemapThis web site is no longer maintained.  Read why.MySQL Select and Sort Status Variables MySQL SHOW STATUS; and mysqlreport using the -sas command line option show nine status var

xiaolang85的专栏 1750

MySQL OCP888题解066-sort_buffer_size和tmp_table_size

MySQL OCP888题解066-sort_buffer_size和tmp_table_size

日拱一卒的博客 813

mysql表排序怎么设置_MySQL数据库如何进行排序(Sort)操作?

参考原始文档后, 自已总结一下, 有不对的地方请指正. 在MySQL中进行排序有两种算法, 以4.1版本为分水岭, 在此之前排序时的数据只包括ORDER BY中的列和一个记录的指针(Sort A), 在4.1之后多了一种改进的方法, 排序的数据中可以包括SELECT中的列和ORDER BY中的列(Sort B)Sort A中最主要的坏处是需要进行二次扫表, 第一次是将ORDER BY的列及记录指针...

weixin_30940057的博客 2237

MySQL:性能监控之select与sort

select_scan:全表扫描。在explain中type会显示为All,原因是查询没有用索引。因为全表扫描一般比较慢,所以应该尽量避免 select_full_join:和select_scan差不多,区别是select_full_join代表的是第二张以及之后的表。explain中的类型也是all,原因是表连接所用的字段上没有索引。它对性能有更为严重的影响,绝对要避免,所以用于连接的...

OceanStar的博客 2247

mysql select 返回列,是否可以对在mysql SELECT语句中返回列的顺序进行排序?

Imagine two questions from an online survey:Do you like apples?Result stored in mysql db column "q1" as 1 for Yes or 0 for NoDo you like oranges?Result stored in mysql db column "q2" as 1 for Yes or 0...

weixin_29034963的博客 188

mysql数据库使用循环更新数据_mysql批量更新数据,即:循环select记录然后更新某一字段...

事情的原委:今天遇到一个问题:一个数据表case_folder_info想要实现自定义排序功能,就在表里新加了一个字段SORT_NUMBER,由于表里存在已有数据,所以这个SORT_NUMBER字段都为空,但要想实现上移、下移、置顶等功能的话,需要里面有默认数据,所以我想给这个字段里默认有一些排序的值。思考解决办法:1、用c#写个小程序,然后取出来所有数据,UPDATE一遍,这个还得新建项目,添加...

weixin_29197835的博客 1549

MySQL 使用 sort_buffer_size 参数来控制每个线程用于排序的内存缓冲区大小。

这个参数在排序操作(如ORDER BY或GROUP BY)中起着关键作用,尤其是在没有索引支持时需要进行文件排序(Filesort)的情况下。

长风破浪会有时的博客 569

mysql select 效能_MySQL 效能监控工具--mysqlreport -转

mysqlreport是由 hackmysql.com的站长所撰写的PerlScritps,旨在协助MySQLDBA搜集与分析MySQL的运作状况。官 方网站:http://hackmysql.com/软 件下载:http://hackmysql.com/mysqlreport命 令行选项的格式是 --选项,不过 -选项 的格式也可以。所有的选项都有其缩写,只要是唯一的。例如...

weixin_39631953的博客 199
上一篇: mysqltoolkit
下一篇: 取分组中的特定记录
epee
博客等级 码龄24年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值