返回顶部
首页 > 资讯 > 数据库 >mysql排序的有什么区别
  • 514
分享到

mysql排序的有什么区别

2024-04-02 19:04:59 514人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关Mysql排序的有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。排序是数据库中的一个基本功能,MySQL也不例外。用户通过Order

这篇文章将为大家详细讲解有关Mysql排序的有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

排序是数据库中的一个基本功能,MySQL也不例外。

用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct语句都会隐含使用排序。本文首先会简单介绍sql如何利用索引避免排序代价,然后会介绍mysql实现排序的内部原理。

解决大家的以下疑问:

MySQL在哪些地方会使用排序,怎么判断MySQL使用了排序;

MySQL有几种排序模式,通过什么方法让MySQL选择不同的排序模式;

MySQL排序跟read_rnd_buffer_size有啥关系,在哪些情况下增加read_rnd_buffer_size能优化排序;

怎么判断MySQL使用到了磁盘来排序,怎么避免或者优化磁盘排序;

排序时变长字段(varchar)数据在内存是怎么存储的,5.7有哪些改进;

在情况下,排序模式有哪些改进;

sort_merge_pass到底是什么 ,该状态值过大说明了什么问题,可以通过什么方法解决;

MySQL使用到了排序的话,依次可以通过什么办法分析和优化让排序更快?

二、排序

我们通过explain查看MySQL执行计划时,经常会看到在Extra列中显示Using filesort。

对于不能利用索引避免排序的SQL,数据库不得不自己实现排序功能以满足用户需求,此时SQL的执行计划中会出现“Using filesort”,这里需要注意的是filesort并不意味着就是文件排序,其实也有可能是内存排序,这个主要由sort_buffer_size参数与结果集大小确定。

其实这种情况就说明MySQL使用了排序。Using filesort经常出现在order by、group by、distinct、join等情况下。

MySQL内部实现排序主要有3种方式,常规排序,优化排序和优先队列排序。

CREATE TABLE t1(id int, col1 varchar(64), col2 varchar(64), col3 varchar(64), PRIMARY KEY(id),key(col1,col2));
SELECT col1,col2,col3 FROM t1 WHERE col1>100 ORDER BY col2;

请看这三种排序的区别:

a.常规排序

(1).从表t1中获取满足WHERE条件的记录

(2).对于每条记录,将记录的主键+排序键(id,col2)取出放入sort buffer

(3).如果sort buffer可以存放所有满足条件的(id,col2)对,则进行排序;否则sort buffer满后,进行排序并固化到临时文件中。(排序算法采用的是快速排序算法)

(4).若排序中产生了临时文件,需要利用归并排序算法,保证临时文件中记录是有序的

(5).循环执行上述过程,直到所有满足条件的记录全部参与排序

(6).扫描排好序的(id,col2)对,并利用id去捞取SELECT需要返回的列(col1,col2,col3)

(7).将获取的结果集返回给用户。

从上述流程来看,是否使用文件排序主要看sort buffer是否能容下需要排序的(id,col2)对,这个buffer的大小由sort_buffer_size参数控制。此外一次排序需要两次io,一次是捞(id,col2),第二次是捞(col1,col2,col3),由于返回的结果集是按col2排序,因此id是乱序的,通过乱序的id去捞(col1,col2,col3)时会产生大量的随机IO。对于第二次MySQL本身一个优化,即在捞之前首先将id排序,并放入缓冲区,这个缓存区大小由参数read_rnd_buffer_size控制,然后有序去捞记录,将随机IO转为顺序IO。

b.优化排序

常规排序方式除了排序本身,还需要额外两次IO。优化的排序方式相对于常规排序,减少了第二次IO。主要区别在于,放入sort buffer不是(id,col2),而是(col1,col2,col3)。由于sort buffer中包含了查询需要的所有字段,因此排序完成后可以直接返回,无需二次捞数据。这种方式的代价在于,同样大小的sort buffer,能存放的(col1,col2,col3)数目要小于(id,col2),如果sort buffer不够大,可能导致需要写临时文件,造成额外的IO。当然MySQL提供了参数max_length_for_sort_data,只有当排序元组小于max_length_for_sort_data时,才能利用优化排序方式,否则只能用常规排序方式。

c.优先队列排序

为了得到最终的排序结果,无论怎样,我们都需要将所有满足条件的记录进行排序才能返回。那么相对于优化排序方式,是否还有优化空间呢?5.6版本针对Order by limit M,N语句,在空间层面做了优化,加入了一种新的排序方式--优先队列,这种方式采用堆排序实现。堆排序算法特征正好可以解limit M,N 这类排序的问题,虽然仍然需要所有元素参与排序,但是只需要M+N个元组的sort buffer空间即可,对于M,N很小的场景,基本不会因为sort buffer不够而导致需要临时文件进行归并排序的问题。对于升序,采用大顶堆,最终堆中的元素组成了最小的N个元素,对于降序,采用小顶堆,最终堆中的元素组成了最大的N的元素。

关于mysql排序的有什么区别就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: mysql排序的有什么区别

本文链接: https://lsjlt.com/news/51184.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql排序的有什么区别
    这篇文章将为大家详细讲解有关mysql排序的有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。排序是数据库中的一个基本功能,MySQL也不例外。用户通过Order ...
    99+
    2024-04-02
  • java选择排序和冒泡排序有什么区别
    Java中的选择排序和冒泡排序是两种不同的排序算法,它们的区别主要体现在排序的方式和效率上。 排序方式: 选择排序:每次从未排...
    99+
    2023-10-26
    java
  • python中归并排序和快速排序有什么区别
    python中归并排序和快速排序有什么区别?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在预期情况下的快速排序和归并排序时间复杂度都一样, 在空间复杂度上,没使...
    99+
    2023-06-15
  • MySQL的@和@@有什么区别
    本篇内容主要讲解“MySQL的@和@@有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的@和@@有什么区别”吧!MySQL的@与@@区别@x ...
    99+
    2024-04-02
  • css的框架和排版有什么区别
    CSS框架和排版的区别主要体现在其功能和用途上。下面将详细介绍这两者之间的区别。功能差异:CSS框架:CSS框架是一种预先编写好的CSS代码集合,提供了一系列的样式和组件,用于简化和加速网页设计和开发过程。它们通常包含一些基础的CSS样式、...
    99+
    2023-10-21
    css css框架
  • mysql和oracle的区别有什么
    一、宏观上: Oracle是大型的数据库而Mysql是中小型数据库;Mysql是开源的,Oracle是收费的,且价格昂贵。 Oracle支持大并发,大访问量,是OLTP的最好的工具。 安装占用的内存也是有差别,Mysql安装完成之后占用的内...
    99+
    2023-10-21
    数据库 oracle mysql
  • nosql与mysql有什么区别
    小编给大家分享一下nosql与mysql有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL与NoSQL都是市场上...
    99+
    2024-04-02
  • mysql和oracle有什么区别
    小编给大家分享一下mysql和oracle有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL和Oracle都是流...
    99+
    2024-04-02
  • redis与mysql有什么区别
    小编给大家分享一下redis与mysql有什么区别,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!区别分析如下:1、mysql和redis的数据库类型mysql是关系型数据库,主要用于存放持...
    99+
    2024-04-02
  • Oracle与Mysql有什么区别
    Oracle与Mysql有什么区别,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  Oracle与Mysql的区别:  Ora...
    99+
    2024-04-02
  • MySQL和MariaDB有什么区别
    这期内容当中小编将会给大家带来有关MySQL和MariaDB有什么区别,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MariaDB数据库管理系统是MySQL的一个分支,主...
    99+
    2024-04-02
  • mongodb和mysql有什么区别
    MongoDB和MySQL的区别:1、MySQL是传统的关系型数据库,而MongoDB是非关系型数据库;2、MySQL在不同的引擎上有不同的存储方式,而MongoDB的存储方式是“虚拟内存+持久化”;3、MySQL使用传统的sql语句等等。...
    99+
    2023-07-18
  • SQL 和 MySQL 有什么区别?
    SQLSQL 是一种可用于利用数据库的语言。它是 MySQL、SQL Server、Oracle 等数据库的基础语言。SQL 代表结构查询语言,它可用于利用关系数据库管理系统。这也可用于访问、使用一些命令操作和更新数据库中的数据。 SQL命...
    99+
    2023-10-22
  • postgresql和mysql有什么区别
    PostgreSQL和MySQL是两种不同的关系型数据库管理系统。下面是它们之间的一些区别:1. 数据类型支持:PostgreSQL...
    99+
    2023-08-25
    mysql
  • sqlserver和mysql有什么区别
    SQL Server和MySQL是两种不同的关系型数据库管理系统,它们之间有一些区别: 所属公司:SQL Server是由微软公...
    99+
    2024-04-09
    mysql sqlserver
  • mysql和sql_server有什么区别
    mysql和sql server作为两种关系型数据库管理系统,在数据类型、语法、平台支持、许可证、数据库大小限制、性能以及数据库管理工具等方面存在差异。 MySQL和SQL Serve...
    99+
    2024-03-15
    mysql sql server management studio 并发请求
  • mysql和postgresql有什么区别
    MySQL和PostgreSQL是两种流行的开源关系型数据库管理系统,它们之间有一些重要的区别: 数据类型支持:PostgreS...
    99+
    2024-04-09
    mysql postgresql
  • redis和mysql有什么区别
    redis 和 mysql 的主要区别在于:redis 是键值存储数据库,而 mysql 是关系型数据库。redis 读写速度快,并发性强,可扩展性好,而 mysql 读写速度稍慢,并发...
    99+
    2024-04-19
    mysql redis
  • 小程序和H5有什么区别
    这篇文章给大家分享的是有关小程序和H5有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。微信小程序相信大家都已经不陌生了,它具备占用内存比较小,各个方面的功能比较齐全,开发的费用比较便宜等优势,说到这些人们...
    99+
    2023-06-27
  • 小程序与APP有什么区别
    小程序与APP的区别主要有以下几点: 开发成本和周期:小程序相对于APP来说,开发成本较低,周期较短。因为小程序不需要单独下载安...
    99+
    2024-04-17
    小程序
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作