位置: 编程技术 - 正文

MySQL order by性能优化方法实例(mysql order by 性能)

编辑:rootadmin

推荐整理分享MySQL order by性能优化方法实例(mysql order by 性能),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql order by性能低,mysql order by rand,mysql中orderby,mysql order by语句,mysql中orderby,mysql中orderby,mysql中orderby,mysql order by 性能,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

工作过程中,各种业务需求在访问数据库的时候要求有order by排序。有时候不必要的或者不合理的排序操作很可能导致数据库系统崩溃。如何处理好order by排序呢?本文从原理以及优化层面介绍 order by 。

一 MySQL中order by的原理

1 利用索引的有序性获取有序数据

当查询语句的 order BY 条件和查询的执行计划中所利用的 Index 的索引键(或前面几个索引键)完全一致,且索引访问方式为 rang,ref 或者 index 的时候,MySQL 可以利用索引顺序而直接取得已经排好序的数据。这种方式的 order BY 基本上可以说是最优的排序方式了,因为 MySQL 不需要进行实际的排序操作。需要注意的是使用索引排序也有很多限制。这个在后文中中解释。

2 利用内存/磁盘文件排序获取结果

由于没有可以利用的有序索引取得有序的数据,MySQL需要通过相应的排序算法,将取得的数据在sort_buffer_size系统变量所设置大小的排序区进行排序,这个排序区是每个Thread 独享的,所以说可能在同一时刻在 MySQL 中可能存在多个 sort buffer 内存区域。 在MySQL中filesort 的实现算法有两种:

1) 双路排序:是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行指针信息,然后在sort buffer 中进行排序。 2) 单路排序:是一次性取出满足条件行的所有字段,然后在sort buffer中进行排序。

在 MySQL4.1 版本之前只有第一种排序算法,第二种算法是从MySQL4.1开始的改进算法,主要目的是为了减少第一次算法中需要两次访问表数据的IO操作,将两次变成了一次,但相应也会耗用更多的 sort buffer 空间。典型的以空间换时间的优化方式。当然,MySQL4.1开始的以后所有版本同时也支持第一种算法,MySQL主要通过比较系统参数 max_length_for_sort_data的大小和Query语句所取出的字段类型大小总和来判定需要使用哪一种排序算法。如果max_length_for_sort_data更大,则使用第二种优化后的算法,反之使用第一种算法。所以如果希望 order BY 操作的效率尽可能的高,需要注意max_length_for_sort_data参数的设置。

MySQL order by性能优化方法实例(mysql order by 性能)

二 优化order by

当无法避免排序操作时,又该如何来优化呢?很显然,优先选择第一种using index 的排序方式,在第一种方式无法满足的情况下,尽可能让 MySQL 选择使用第二种单路算法来进行排序。这样可以减少大量的随机IO操作,很大幅度地提高排序工作的效率。

1 加大 max_length_for_sort_data 参数的设置

在 MySQL 中,决定使用老式排序算法还是改进版排序算法是通过参数 max_length_for_ sort_data 来决定的。当所有返回字段的最大长度小于这个参数值时,MySQL 就会选择改进后的排序算法,反之,则选择老式的算法。所以,如果有充足的内存让MySQL 存放须要返回的非排序字段,就可以加大这个参数的值来让 MySQL 选择使用改进版的排序算法。

2 去掉不必要的返回字段

当内存不是很充裕时,不能简单地通过强行加大上面的参数来强迫 MySQL 去使用改进版的排序算法,否则可能会造成 MySQL 不得不将数据分成很多段,然后进行排序,这样可能会得不偿失。此时就须要去掉不必要的返回字段,让返回结果长度适应 max_length_for_sort_data 参数的限制。

3 增大 sort_buffer_size 参数设置

这个值如果过小的话,再加上你一次返回的条数过多,那么很可能就会分很多次进行排序,然后最后将每次的排序结果再串联起来,这样就会更慢,增大 sort_buffer_size 并不是为了让 MySQL选择改进版的排序算法,而是为了让MySQL尽量减少在排序过程中对须要排序的数据进行分段,因为分段会造成 MySQL 不得不使用临时表来进行交换排序。

但是这个值不是越大越好:

1 Sort_Buffer_Size 是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存。2 Sort_Buffer_Size 并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源。3 据说Sort_Buffer_Size 超过2M的时候,就会使用mmap() 而不是 malloc() 来进行内存分配,导致效率降低。

MySQL 5.7增强版Semisync Replication性能优化 一前言前文介绍了5.5/5.6版本的MySQLsemisync基础原理和配置,随着MySQL5.7的发布,新版本的MySQL修复了semisync的一些bug并且增强了功能。支持发送binlog和接受

MySQL Semisynchronous Replication介绍 前言MySQL5.5版本之前默认的复制是异步(Asynchronous)模式的,MySQL5.5以plugins的方式提供了SemisynchronousReplication模式。在介绍semisync之前,我们先了解:半同步Asyn

MySQL中InnoDB的Memcached插件的使用教程 安装为了让文章更具完整性,我们选择从源代码安装MySQL,需要注意的是早期的版本有内存泄漏,所以推荐安装最新的稳定版,截至本文发稿时为止,最

标签: mysql order by 性能

本文链接地址:https://www.jiuchutong.com/biancheng/347686.html 转载请保留说明!

上一篇:MySQL Index Condition Pushdown(ICP)性能优化方法实例

下一篇:MySQL 5.7增强版Semisync Replication性能优化(mysql 5.7 8.0)

  • 所得税的记账凭证
  • 商铺税费怎么算2021
  • 延期缴纳税款是纳税争议吗
  • 租入房租装修费摊销
  • 子公司固定资产移到母公司
  • 二手车销售统一专票图片
  • 政府补贴流程
  • 营改增是什么时候提出的
  • 扣缴个人所得税报告表
  • 房产税细节
  • 物业公司代收代付水电费会计分录
  • 广告制作需要交文化建设费吗
  • 企业给员工购买的团体意外险的被保险人一般是
  • 贸易公司购买汽车的发票可以用抵公司的税吗
  • 营改增之前
  • 税控盘抵税申报表如何撤销
  • 一个季度为纳税期限的规定适用
  • 个人对公益事业的认识与看法
  • 哪些出口业务不能做
  • 当月所得税是什么意思
  • 收到承兑后背书怎么处理
  • 取得运输单位开具的普通发票
  • 个人到税局开具发票流程
  • 石油天然气用途
  • 资产账实不符说明
  • QQExternal.exe是什么进程?QQExternal.exe进程为什么被运行?
  • 应税消费品对外出售
  • 电商快递费怎么算
  • 商贸企业小规模转一般纳税人条件
  • 免抵退税怎么做账
  • 固定资产财产损失的账务处理
  • php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
  • 项目完工叫什么
  • 小规模纳税人增值税免税政策
  • nvm for window
  • 33.JavaScript映射与集合(Map、Set)数据类型基础知识介绍与使用
  • 厂房没租出去要交税吗
  • 固定资产多少可以一次摊销
  • 网上怎么申请增驾摩托车
  • java变量初始化的两种方式
  • MySQL慢查询优化面试问题
  • 税前补发补扣
  • 开专票一定要写明细吗
  • 职工福利费的开支范围的规定扣除
  • 公司申请破产后债务谁来还
  • 对公账户发票和普通发票不一样吗
  • 服务费可以计入主营业务成本吗
  • 公司为职工提供免费午餐需要交纳个人所得税吗?
  • 材料暂估入库的附件需要哪些资料
  • 租办公室自己装修可以拆走吗
  • 专利年费可以计入研发费用加计扣除吗
  • 可转换债券的转换比率计算公式
  • 电子退库纳税人是什么意思
  • 提取的安全生产费
  • 开具的增值税专用发票上注明的价款含税吗
  • sql拆分函数
  • mysql5.7版本的服务的名字是
  • mysql怎么取消密码
  • linux开机启动过程图解
  • 电脑提示Windows照片查看器无法打开此图片
  • windows命令提示符命令大全
  • 拒绝远程操作
  • ubuntu开机密码不记得了
  • windows xp系
  • ipcservice.dll是什么?
  • kcleaner是什么文件夹
  • ie无法打开https
  • win10预览版和正式版区别
  • linux批量ping
  • 网络游戏数据包
  • Android Fragment学习笔记(2) ----使用ListFragment显示列表(上)
  • 安卓端数据库
  • 快速解决偏头痛的6个方法
  • javascript详细介绍
  • 电子发票未验真是假发票吗
  • 社保批扣和灵活就业批扣有什么区别
  • 江苏省国税电子税务局官网发票验
  • 无锡税务举报网站
  • 发票打印机设备设置
  • 怎样打印护士资格证
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设