广告
返回顶部
首页 > 资讯 > 数据库 >关于mysql5.6 的排序问题.
  • 896
分享到

关于mysql5.6 的排序问题.

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

Mysql 5.6 的排序进行了优化.  同样的sql , 在5.5 跟5.6 上可能得到不同的结果: CREATE TABLE `TestCase2` (   

Mysql 5.6 的排序进行了优化.  同样的sql , 在5.5 跟5.6 上可能得到不同的结果:


CREATE TABLE `TestCase2` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `aValue` decimal(19,2) NOT NULL,
  `accuracyClassType_id` bigint(20) NOT NULL,
  `productType_id` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `FKF58064BD791396` (`productType_id`),
  KEY `FKF58064BDED5076` (`accuracyClassType_id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

INSERT INTO `TestCase2` (`id`, `aValue`, `accuracyClassType_id`, `productType_id`)
VALUES
(1,2.00,3,2),
(2,3.00,3,2),
(3,4.00,2,3),
(4,5.00,2,3),
(5,6.00,2,3),
(6,8.00,2,3),
(7,10.00,2,3),
(8,12.00,2,3),
(9,16.00,2,3),
(10,20.00,2,3),
(11,6.00,2,4),
(12,8.00,2,4),
(13,10.00,2,4),
(14,12.00,2,4),
(15,5.00,2,2),
(16,6.00,2,2);
select * from Testcase2 order by aValue desc;
# as you can see mysql has added a fallback sorting because aValue is not unique, which is ok 
# the first four id's of the results are: 10, 9, 14, 8 

select * from Testcase2 order by aValue desc limit 4;
# as expected the result id's (based on the order by) are : 10, 9, 14, 8 

select * from Testcase2 order by aValue desc limit 3;
# which surprisingly results in the following id's based on the order by: 10, 9, 8 ???????
# expecting id's: 10, 9, 14 (see query with limit 4)[19 Mar 2014 13:34] Miguel SolorzanoThank you for the bug report.

mysql 5.1 > select * from Testcase2 order by aValue desc limit 4;
+----+--------+----------------------+----------------+
| id | aValue | accuracyClassType_id | productType_id |
+----+--------+----------------------+----------------+
| 10 |  20.00 |                    2 |              3 |
|  9 |  16.00 |                    2 |              3 |
| 14 |  12.00 |                    2 |              4 |
|  8 |  12.00 |                    2 |              3 |
+----+--------+----------------------+----------------+
4 rows in set (0.00 sec)

mysql 5.1 > select * from Testcase2 order by aValue desc limit 3;
+----+--------+----------------------+----------------+
| id | aValue | accuracyClassType_id | productType_id |
+----+--------+----------------------+----------------+
| 10 |  20.00 |                    2 |              3 |
|  9 |  16.00 |                    2 |              3 |
| 14 |  12.00 |                    2 |              4 |
+----+--------+----------------------+----------------+
3 rows in set (0.00 sec)
mysql 5.6 > select * from Testcase2 order by aValue desc limit 4;
+----+--------+----------------------+----------------+
| id | aValue | accuracyClassType_id | productType_id |
+----+--------+----------------------+----------------+
| 10 |  20.00 |                    2 |              3 |
|  9 |  16.00 |                    2 |              3 |
| 14 |  12.00 |                    2 |              4 |
|  8 |  12.00 |                    2 |              3 |
+----+--------+----------------------+----------------+
4 rows in set (0.00 sec)

mysql 5.6 > select * from Testcase2 order by aValue desc limit 3;
+----+--------+----------------------+----------------+
| id | aValue | accuracyClassType_id | productType_id |
+----+--------+----------------------+----------------+
| 10 |  20.00 |                    2 |              3 |
|  9 |  16.00 |                    2 |              3 |
|  8 |  12.00 |                    2 |              3 |
+----+--------+----------------------+----------------+
3 rows in set (0.00 sec)


mysql 5.5 跟 5.6 两个版本对排序的实现: 
Mysql 5.5 willl 
- allocate buffer space for 1000 rows 
- scan the table, inserting each row into the buffer 
- sort the buffer, this requires about 10.000 comparisons 
- return the first 3 (or 4) rowsMysql
5.6 will 
- allocate buffer space for 3 (or 4) rows 
- scan the table, maintaining a collection of 3 (or 4) "winners"   this requires about 2000 comparisons 
- sort final set of "winners", this requires about 6 comparisons 
- return the result

sql 标准里对于重复值的排序字段, 应该出哪行记录是没有定义的,  这就完全取决于代码的实现了. 




我们的升级测试,可能会涉及到 5.5 与5.6 的结果对比,  这里可能会引起疑问. 


这是正常的. 如果确实需要严格的排序,实现5.6 跟5.5 同样的显示结果. 


需要修改sql 语句, 在排序子句中加上  一个唯一字段. 





参考: 
https://bugs.mysql.com/bug.PHP?spm=5176.100239.bloGCont27649.4.tlI76p&id=72076

Http://didrikdidrik.blogspot.co.uk/



您可能感兴趣的文档:

--结束END--

本文标题: 关于mysql5.6 的排序问题.

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 关于mysql5.6 的排序问题.
    mysql 5.6 的排序进行了优化.  同样的sql , 在5.5 跟5.6 上可能得到不同的结果: CREATE TABLE `TestCase2` (   ...
    99+
    2022-10-18
  • Mybatis关于动态排序#{}${}问题
    目录Mybatis动态排序 #{} ${}问题通过动态排序理解#{}和${}的区别例如注意事项Mybatis动态排序 #{} ${}问题 在写Mybatis动态排序是遇到一个问题,开...
    99+
    2022-11-13
    Mybatis动态排序 Mybatis #{} Mybatis ${}
  • 浅谈element关于table拖拽排序问题
    最近在使用element table的时候,经常会遇到排序的问题,如果只是简单的排序的话,element官方已经给出了指定的方法 //table的默认排序方式是按ID排序 顺序为...
    99+
    2022-11-12
  • 关于Python排序问题(冒泡/选择/插入)
    前言: 学过C语言肯定接触过排序问题,我们最常用的也就是冒泡排序、选择排序、插入排序……等等,同样在Python中也有排序问题,这里我也会讲解Python...
    99+
    2023-05-16
    Python排序 冒泡排序 选择排序 插入排序
  • 关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
    目录Spring里面一对多的关系可以用@OnetoMany注解来实现来看看我的这个例子看一下具体是怎么使用最后我的代码Entity One-to-Many 排序设置Spring里面一...
    99+
    2022-11-12
  • 关于MySQL5.6及以后版本安装以后启动不了的问题
    Mysql 5.6及以后版本出处于安全考虑,root密码不为空。所以在MySQL的安装过程中,会生成一个随机密码,执行 # /etc/init.d/mysql stop然后 #mysqld_safe --u...
    99+
    2022-10-18
  • 关于H3 BPM数据库如何实现排序取数据的问题
    问题:在打印模板中获取子表内容,可从数据库中取数据,而当前项目数据库里面数据按年度录入,但是只需要显示近3年的数据,插件如何实现排序取数据?解决方法:1、先直接写一个SQL语句,把近3年排序后的数据读取出来...
    99+
    2022-10-18
  • 关于一个SFTP问题报错排查过程
    一、问题背景 📓问题概述 日常运维工单为用户在文件服务器上建立账户之后,用户反馈登录报错;通过相邻网段服务器进行sftp登录报错如下: 百度一下过去经验,通过重启sshd服务和检查sshd_config配置都没问题。一筹莫...
    99+
    2023-09-15
    服务器 java 网络
  • 关于MySQL的ORDERBY排序详解
    目录前言ORDER BY 语法实践出真知实践准备静态排序动态排序总结前言 工作中常常会使用ORDER BY进行排序,了解ORDER BY多种排序方式是非常有必要的。 ORDER BY...
    99+
    2023-05-19
    MySQL 排序 MySQL ORDER BY
  • 关于AS3中Vector的sort排序
     先上2个代码private function sortRank(x:RankPlayerModel, y:RankPlayerModel):Number   {    var lastNameSort:Number = sortNum(x...
    99+
    2023-01-31
    Vector sort
  • 关于phpcms v9投票模块选项排序listorder设定问题修改
    关于phpcms v9投票模块选项排序listorder设定问题修改,小弟主要修改了三个文件三处地方。 此方法我觉得自己已经够用,欢迎大家来拍砖。 主要修改三个文件: 1.phpcms\modules\vote\temp...
    99+
    2022-06-12
    phpcms 投票模块 listorder
  • 关于Java序列化的问题有哪些
    本篇内容主要讲解“关于Java序列化的问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“关于Java序列化的问题有哪些”吧!问题一:什么是 Java 序列化?序列化是把对象改成可以存到磁盘...
    99+
    2023-06-02
  • 关于Android9.0 断电后升级问题排查分析
    最近遇到一个项目Android 9.0的,很多机器出现了开机dm-verify error的错误,排查了很久,做了大量的测试,在此坐下记录分析流程 1.问题复现 2.问题排查 ...
    99+
    2022-06-06
    Android
  • VB关于FindWindowEx的问题
    FindWindowEx函数用于在指定窗口的子窗口中查找符合指定条件的窗口。它的声明如下:Public Declare Functi...
    99+
    2023-08-08
    VB
  • 关于MySQL的ORDER BY排序详解
    目录前言ORDER BY 语法实践出真知实践准备静态排序动态排序总结前言 工作中常常会使用ORDER BY进行排序,了解ORDER BY多种排序方式是非常有必要的。 ORDER BY 排序可以分为静态排序和动态排序,当然...
    99+
    2023-05-12
    MySQL 排序 MySQL ORDER BY
  • 基于mybatis一对多查询内层排序的问题
    目录mybatis一对多查询内层排序mybatis多排序问题mybatis一对多查询内层排序 <!--根据板块id查询所有主题->指标->维度--> ...
    99+
    2022-11-12
  • 关于Kill指令停掉Java程序的问题
    目录1. Java的原生关闭钩子1.1 使用IDE关闭调试1.2 使用kill -15 指令1.3 使用kill -9 指令2. SpringBoot关闭钩子2.1 使用IDE关闭2...
    99+
    2022-11-12
  • 如何通过V8源码看一个关于JS数组排序的诡异问题
    这篇文章主要介绍了如何通过V8源码看一个关于JS数组排序的诡异问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。原始数组如下:var&nbs...
    99+
    2022-10-19
  • 关于关闭管道的问题DisconnectNamedPipe
    `DisconnectNamedPipe` 是一个Windows API函数,用于关闭命名管道。命名管道是一种实现进程间通信的机制,...
    99+
    2023-08-08
    问题
  • 关于JWTtoken的管理问题
    JWT简介:      Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。因为网络上有很多关于jwt的详细介绍了,所以我这里就不再赘述。但是JWT的大概还是要简要讲一下的。   ...
    99+
    2023-01-30
    JWTtoken
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作