正排倒排,并不是 MySQL 的排序的全部!

这篇具有很好参考价值的文章主要介绍了正排倒排,并不是 MySQL 的排序的全部!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

一个悠闲的上午,小航送了我,一袋坚果,他看我吃的正香,慢慢问道:”温哥,mysql的排序,有什么要注意的吗,不就是正排倒排吗?”

我一听他问我的问题,顿感坚果不香了,但是为了技术(mainzi),我装作大师的说道:

“正排倒排,当然不是全部,你最少要知道,2个参数,1个优化,一种特殊情况”

注:东西不能乱吃啊

两个核心参数

sort_buffer_size 决定内排,外排。内排就是走内存,外排就是采用归并排序走磁盘。

max_length_for_sort_data 决定 全字段排序还是,rowid排序。

全字段排序

字段都放到 sort_buffer 中,排序后就会直接从内存里面返回查询结果了

Rowid排序

内存放rowid与排序字段,排序后,再从库中找数据,拼接返回。

优化手段覆盖索引

覆盖索引是指,索引上的信息足够满足查询请求,不需要再回到主键索引上去取数据。

例子

explain
SELECT order_id,pay_date FROM orders_detail WHERE order_id='1001' ORDER BY pay_date asc

正排倒排,并不是 MySQL 的排序的全部!

用到了filesort,也就是需要排序。

调整索引

ALTER TABLE `orders_detail` DROP INDEX `order_id`,ADD INDEX `order_id` (`order_id`, `pay_date`);

之后

explain
SELECT order_id,pay_date FROM orders_detail WHERE order_id='1001' ORDER BY pay_date asc

正排倒排,并不是 MySQL 的排序的全部!

没有用到filesort,因为复合索引,字段后是有序的。

特殊情况 Order by+ Limit

Limit可能用到优先队列排序算法。

例子:

  1. 开启优化追踪

SET OPTIMIZER_TRACE="enabled=on",END_MARKERS_IN_JSON=off;
SET optimizer_trace_offset=-30, optimizer_trace_limit=30;
  1. 查看字段索引

SHOW INDEX FROM oc_order_online WHERE COLUMN_NAME='order_name';

正排倒排,并不是 MySQL 的排序的全部!

结果显示没有索引

  1. 执行order by+limit 查询语句

select * from `oc_order_online`  order by  `order_name`  limit 20
  1. 查询优化追踪信息

SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE limit 30

对应结果如下:

正排倒排,并不是 MySQL 的排序的全部!

查询将红框中数据,粘贴到json.cn查看格式化数据,有如下片段

正排倒排,并不是 MySQL 的排序的全部!

filesort_priority_queue_optimization 中的chosen:true表示使用了优先队列排序。

总结

  1. sort_buffer_size 决定内排,外排

  2. max_length_for_sort_data 决定 全字段排序还是,rowid排序

  3. 覆盖索引是一种优化手段

  4. Limit可能涉及优先队列排序文章来源地址https://www.toymoban.com/news/detail-492951.html

 
                    

到了这里,关于正排倒排,并不是 MySQL 的排序的全部!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PostgreSQL 简洁、使用、正排索引与倒排索引、空间搜索、用户与角色

    PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 9.0 :支持64位windows系统,异步流数据复制、Hot Standby; 生产环境主流的版本是PostgreSQL 12 BSD协议:可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

    2024年02月15日
    浏览(54)
  • ES高频面试问题:一张图带你读懂 Elasticsearch 中“正排索引(正向索引)”和“倒排索引(反向索引)”区别

    从广义来说,doc values 本质上是一个序列化的 列式存储 。列式存储 适用于聚合、排序、脚本等操作,所有的数字、地理坐标、日期、IP 和不分词( not_analyzed )字符类型都会默认开启, 不支持 text 和 annotated_text 类型 倒排 :即 词项 = 包含当前词项的doc_id的列表 的映射。倒排

    2024年02月02日
    浏览(55)
  • [C++项目] Boost文档 站内搜索引擎(3): 建立文档及其关键字的正排 倒排索引、jieba库的安装与使用...

    之前的两篇文章: 第一篇文章介绍了本项目的背景, 获取了 Boost 库文档 🫦[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍… 第二篇文章 分析实现了 parser 模块. 此模块的作用是 对所有文档 html 文件, 进行清理并汇总 🫦[C++项目] Boost文档 站内搜

    2024年02月07日
    浏览(58)
  • 【Elasticsearch】ES精确查询和范围查询,ES时间字段排序实例,ES倒排索引介绍

    termQuery matchQuery 模糊查询 multiMatchQuery 多个字段模糊查询 如果时间字段写入时用的类型是Text,可以用“时间字段.keyword”来处理 #查询前传入分页参数 #分页后拿到总记录数 把文档D对应到的映射转换为到文档ID的映射,每个都对应着一系列的文档,这些文

    2024年02月15日
    浏览(118)
  • 如何实现element ui中的表格全部数据分页排序

    默认情况下, table表格设置了sortable是只能当前页, 数据进行排序的, 这显然是没有多大意义的 ,那么如何实现全部数据分页排序呢? 首先 ,把sortable 写成sortable=“custom” 然后,在 el-table标签中加入 @sort-change=\\\'sortChange\\\' 最后 ,sortChange方法代码如下: sortChange(val){      

    2024年02月11日
    浏览(44)
  • 递归--打印一个字符串的全部排列(java)

    自负串全排序: 举例: abc 的全排序是: abc acb bac bca cba cab 因为每个字符都要选,其实就是选择每个字符的顺序,那我们递归时,就可以把不同顺序一直递归下去. 代码演示 解题思路: 我们可以按上面的代码去做,只需要用HashSet 去保存答案,就会去重了,但这样并没有优化效率,在递归时

    2024年02月06日
    浏览(53)
  • Git 将一个分支完全覆盖(不是合并)到另一个分支

    Git 将一个分支完全覆盖(不是合并)到另一个分支 案例: 将dev分支的代码完全覆盖到master上      1.git checkout master      2.git reset --hard dev      3.git push origin master --force 注意:若被覆盖的分支有处于受保护(protected)的状态,则执行push操作后会报错:      1. remote: GitLab: Y

    2024年02月01日
    浏览(87)
  • Java判断一个实体是不是空的

    在Java中,我们可以使用以下方法来判断一个实体是否为空: 对象是否为null 可以使用Java中的 == 运算符来判断一个对象是否为null,如果对象为null,则表示对象为空。 例如: 字符串是否为空 可以使用Java中的 isEmpty() 方法来判断一个字符串是否为空,如果字符串为空,则返回

    2024年02月13日
    浏览(45)
  • MySQL-SQL全部锁详解(下)

    ♥️ 作者:小刘在C站 ♥️ 个人主页:  小刘主页  ♥️ 努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏: 云计算技术 ♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSD

    2024年02月11日
    浏览(45)
  • MySQL-SQL全部锁详解(上)

    ♥️ 作者:小刘在C站 ♥️ 个人主页:  小刘主页  ♥️ 努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏: 云计算技术 ♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSD

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包