MySQL Order By排序混乱问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 做积分排行榜页面时, 发现vue key值冲突, 如下: 因为key为数据在mysql中的主键, 在排除前端错误之后, 判断是mysql排序问题. mysql排序sql如下: 该sql使用score,和create_time作为排序条件, 查询结果如下: 结果乱序了.

问题描述

    做积分排行榜页面时, 发现vue key值重复,如下:

a494899da5fff619851364885c3cf464272c6325

    此处的key值为数据在mysql中的主键,在排除前端错误之后,判断是mysql排序问题. mysql排序sql如下:

b6f23b857d91e484db9ee5a174befdebffd1a96f

    该sql使用score和create_time作为排序条件,查询结果如下:

e412e9f2bd38b1dc310a87f777b55cbb2b0426ec5e7d50809220aff4f35779a3b689a6163efd51fd

       结果确实乱序了。

查找解决方案

       查找原因,发现score和create_time存在相同值,当相同的score和create_time有多条数据时,mysql会对这些数据进行随机排序,所以同一条SQL查出的结果会出现排序不同的情况。

       mysql官网对此有一些描述:

     If multiple rows have identical values in the ORDER BY columns, the server is free to return those rows in any order, 
     and may do so differently depending on the overall execution plan. 
     In other words, the sort order of those rows is nondeterministic with respect to the nonordered columns.
AI 代码解读
       如果order by的字段有多个行都有相同的值,mysql会以随机的顺序返回查询结果,并且依据具体的执行计划会有不同。
     If it is important to ensure the same row order with and without LIMIT, 
     include additional columns in the ORDER BY clause to make the order deterministic. 
     For example, if id values are unique, you can make rows for a given category value appear in id order by sorting like this:
AI 代码解读
      如果排列的顺序对你很重要的话,可以额外添加排序条件,例如id字段是唯一的,可以考虑在排序字段中额外加个id去确保顺序稳定。

      我的方案: 排序条件改为 ORDER BY sas.score DESC,sas.statistics_point_id。statistics_point_id是该表的主键,问题解决了。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
mysql 之order by工作流程
本文深入解析了MySQL中`ORDER BY`的排序机制,通过具体示例展示了排序过程及性能优化方法。文章首先分析了基于内存和磁盘的排序方式,包括`sort_buffer_size`的影响以及临时文件的使用场景。接着介绍了`rowid`排序算法,该算法通过减少参与排序的数据量来提升性能,并对比了其与传统排序的区别。此外,还探讨了随机查询`ORDER BY RAND()`的执行流程及其优化策略。最后提到了MySQL 5.6引入的优先队列排序算法,适用于仅需部分有序结果的场景。文章结合`optimizer_trace`工具详细说明了各配置参数对排序行为的影响,为优化查询提供了实用指导。
mysql 之order by工作流程
MySQL底层概述—8.JOIN排序索引优化
本文主要介绍了MySQL中几种关键的优化技术和概念,包括Join算法原理、IN和EXISTS函数的使用场景、索引排序与额外排序(Using filesort)的区别及优化方法、以及单表和多表查询的索引优化策略。
126 22
MySQL底层概述—8.JOIN排序索引优化
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
MySQL 如何实现 ORDER BY 排序?
本文详细解析了MySQL中`ORDER BY`的实现原理及优化方法。通过解析与优化、执行及多种优化技术,如索引利用、内存排序、外部排序等,帮助你提升排序性能。了解其背后的机制,可显著优化查询效率。
367 4
MySQL 如何实现 ORDER BY 排序?
在实际开发中,我们经常会使用 MySQL 的 `ORDER BY`进行排序,那么,`ORDER BY`是如何实现的排序的?我们该如何优化 `ORDER BY`的排序性能?这篇文章,我们来聊一聊。
76 3
MySQL高级篇——排序、分组、分页优化
排序优化建议、案例验证、范围查询时索引字段选择、filesort调优、双路排序和单路排序、分组优化、带排序的深分页优化
match如何在mysql数据库里进行文本的相似度排序?
【9月更文挑战第1天】match如何在mysql数据库里进行文本的相似度排序?
215 1
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
从 MySQL 到时序数据库 TDengine:Zendure 如何实现高效储能数据管理?
TDengine 助力广州疆海科技有限公司高效完成储能业务的数据分析任务,轻松应对海量功率、电能及输入输出数据的实时统计与分析,并以接近 1 : 20 的数据文件压缩率大幅降低存储成本。此外,taosX 强大的 transform 功能帮助用户完成原始数据的清洗和结构优化,而其零代码迁移能力更实现了历史数据从 TDengine OSS 与 MySQL 到 TDengine 企业版的平滑迁移,全面提升了企业的数据管理效率。本文将详细解读这一实践案例。
33 0