日常問題:MySQL排序字段數據相同不能分頁問題

【問題日期】

  • 2022-11-14 22:45:12

【問題描述】

  • MySQL 排序字段數據相同不能分頁問題:在分頁查詢數據時,按創建時間排序,由于數據是批量創建的,導致部分數據創建時間一樣,而此時分頁查詢數據,翻頁后出現重復數據

【問題拆解】

  • 分頁查詢數據
  • 按照創建時間排序&存在創建時間相同的數據
  • 翻頁后出現重復數據

【問題來源】

  • 朋友遇到的

【可能原因】

  • 是因為排序字段只有創建時間

【參考鏈接】

  • MySQL 官方文檔:

    • https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html

    • 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.

    • 如果多行在列中具有相同的值 ORDER BY,則服務器可以自由地以任何順序返回這些行,并且可能會根據整體執行計劃以不同的方式返回。換句話說,這些行的排序順序對于無序的列是不確定的。

  • 51CTO 博客 - 《MySQL排序字段數據相同不能分頁問題》:

    1. https://blog.51cto.com/u_15704340/5439010

    2. 如果 order by 排序的字段有相同的數據,則服務器可以自由地以任何順序返回這些行,并且可能會根據整體執行計劃以不同的方式返回。

【解決方案】

  • 可以在 order by 后面加上一個唯一的 id

【問題總結】

  • 如果多行在列中具有相同的值 ORDER BY,則服務器可以自由地以任何順序返回這些行,并且可能會根據整體執行計劃以不同的方式返回。換句話說,這些行的排序順序對于無序的列是不確定的。
  • 對于帶有ORDER BYGROUP BY LIMIT 子句的查詢,優化器會在默認情況下嘗試選擇有序索引,因為這樣做會加快查詢執行速度。在 MySQL 5.7.33 之前,無法覆蓋此行為,即使在使用其他優化可能更快的情況下也是如此。從 MySQL 5.7.33 開始,可以通過將 optimizer_switch系統變量的 prefer_ordering_index標志設置為off.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535464.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535464.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535464.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據缺失值處理

數據缺失值處理 In [1]: import pandas as pd import numpy as np from sklearn.ensemble import RandomForestRegressor,RandomForestClassifier from sklearn.preprocessing import StandardScaler from sklearn.impute import SimpleImputer In [2]: df pd.DataFrame() df[…

Java基礎:Java數字類型

Java 中包含多種運算符:算數運算符、關系運算符、邏輯運算符、位運算符。在 Math 類中,包含了各種各樣的數學函數。在編寫不同類別的程序時,可能需要的函數也不同。要生成一個隨機數,可以使用 Random 對象。 ~ 本篇主要…

Java基礎:Java流程控制

塊(即復合語句)是指由一對大括號括起來的若干條簡單的 Java 語句。塊確定了變量的作用域。一個塊可以嵌套在另一個塊中。但是,不能在嵌套的兩個塊中聲明同名的變量。使用塊(有時稱為復合語句)可以在Java程序結構中原本…

Java基礎:Java類與對象

面向對象程序設計(簡稱OOP)是當今主流的程序設計范型,它已經取代了20世紀70年代的“結構化”過程化程序設計開發技術。Java是完全面向對象的,必須熟悉OOP才能夠編寫Java程序。面向對象的程序是由對象組成的,每個對象包…

SVN備份腳本

#!/bin/bash #svn全量備份腳本 wwytcode_path/home/wwytcode/project backup_path/home/bak Datedate %Y%m%d cd $backup_path echo date >> $back_path/svn_backup.log svnversionsvnlook youngest $wwytcode_path svnadmin dump --revision 0:$svnversion $wwytcode_pa…

Java基礎:Java面向對象

面向過程的優點是性能比面向對象高,不需要面向對象的實例化;缺點是不容易維護、復用和擴展。面向對象的優點是具有封裝、繼承、多態的特性,因而容易維護、復用和擴展,可以設計出低耦合的系統;缺點是由于需要實例化對象…

薪資生成

import openpyxl from openpyxl.styles import Font,Alignment,Side,Border#設置字體樣式 fontFont(name宋體,size20,boldTrue) font2Font(name宋體,size12,boldTrue) alignmentAlignment(horizontalcenter,verticalcenter,wrap_textTrue) sideSide(stylethin ,color000000) …

Java基礎:Java抽象接口

在Java中,一個沒有方法體的方法應該定義為抽象方法,而如果一個類中含有抽象方法,則該類必須定義為一個抽象類。接口是功能的集合,同樣可看做是一種特殊的數據類型,是比抽象類更為抽象的類,接口只描述所應該…

13 張圖帶你學懂 Kubernetes Service(轉載)

在 Kubernetes 中 Service 主要有4種不同的類型,其中的 ClusterIP 是最基礎的,如下圖所示: 當我們創建一個 NodePort 的 Service 時,它也會創建一個 ClusterIP,而如果你創建一個 LoadBalancer,它就會創建一…

Java基礎:Java異常機制

異常是程序運行過程中出現的錯誤。Java 把異常當作對象來處理,把異常信息封裝成了一個類,并定義一個基類java.lang.Throwable作為所有異常的超類。Throwable : 它是所有錯誤與異常的超類(祖宗類),有兩個子類 Error 和 Exception。…

JavaWeb:Servlet的應用及接口介紹

廣義的 Servlet 泛指在服務器上運行的 Java 程序,但是這個 Java 程序,并不能獨立運行(因為 Servlet 沒有 main 方法),需要部署在相應的 Servlet 容器中,比如 Tomcat 和 Jetty。Servlet 主要功能在于交互式地…

DOCKERFILE參數注解

Dockerfile由一行行命令語句組成,并且支持以#開頭的注釋行。 一般的,Dockerfile 分為四部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令。 Dockerfile的指令是忽略大小寫的,建議使用大寫,使用 # 作為…

Zookeeper:分布式過程協同技術

Zookeeper 是一個高性能的分布式一致系統,在分布式系統中有著廣泛的應用。基于它,可以實現諸如“分布式同步”、“配置管理”、“命名空間管理”等眾多功能,是分布式系統中常見的基礎系統。Zookeeper 主要用來解決分布式集群中應用系統的一致…

面試題2021-2-24

給某CentOs6慮擬機添加了新的數據盤,設備名為/de/sdd.寫命令格式化滿加的效的并掛載到指定目錄/opt fdisk -l mkfs.ext4 /de/sdd mount /de/sdd /opt 如何查看與RabbtMQ服務器之間的establish狀態連接數?netstat -an |grep ESTABLISHED |grep tcp |wc -l…

Zookeeper:在三種模式下的部署

zookeeper 安裝模式有三種:單機模式:單機單 server;集群模式:多機多 server,形成集群;偽集群模式:單機多 server,形成偽集群。 ~ 本篇內容包括:Zookeeper 官網下載、Zook…

Linux namespace概述

操作系統通過虛擬內存技術,使得每個用戶進程都認為自己擁有所有的物理內存,這是操作系統對內存的虛擬化。操作系統通過分時調度系統,每個進程都能被【公平地】調度執行,即每個進程都能獲取到CPU,使得每個進程都認為自己…

Zookeeper:Zookeeper的主從選舉機制

ZAB 協議,全稱 Zookeeper Atomic Broadcast(Zookeeper 原子廣播協議),是為分布式協調服務 ZooKeeper 專門設計的一種支持崩潰恢復的一致性協議。基于該協議,ZooKeeper 實現了一種主從模式的系統架構來保持集群中各個副…

Linux namespace之:uts namespace

理解uts namespace uts(UNIX Time-Sharing System) namespace可隔離hostname和NIS Domain name資源,使得一個宿主機可擁有多個主機名或Domain Name。換句話說,可讓不同namespace中的進程看到不同的主機名。 例如,使用unshare命令(較新版本L…

Zookeeper:事件監聽和通知機制

Zookeeper 允許客戶端向服務端的某個 Znode 注冊一個 Watcher 監聽,當服務端的一些指定事件觸發了這個 Watcher,服務端會向指定客戶端發送一個事件通知來實現分布式的通知功能,然后客戶端根據 Watcher 通知狀態和事件類型做出業務上的改變。 …

Linux namespace之:mount namespace

理解mount namespace 用戶通常使用mount命令來掛載普通文件系統,但實際上mount能掛載的東西非常多,甚至連現在功能完善的Linux系統,其內核的正常運行也都依賴于掛載功能,比如掛載根文件系統/。其實所有的掛載功能和掛載信息都由內…