首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 查詢倒數第二條記錄的三種高效寫法

     編輯:MySQL 綜合教學

場景

業務常需獲取「倒數第 N 條」記錄,以倒數第二條為例,介紹三種通用寫法。

方法一:LIMIT 偏移量(最推薦,性能最佳)

SELECT * 
FROM tablename 
ORDER BY id DESC 
LIMIT 1, 1;

原理:LIMIT offset, count 跳過 offset 行,取 count 行。倒序後第 0 行是最新,第 1 行即倒數第二條。

方法二:子查詢計數(通用性強,不依賴自增 ID)

SELECT * 
FROM tablename a 
WHERE (SELECT COUNT(*) FROM tablename b WHERE a.id < b.id) = 1;

原理:統計比當前行 ID 大的記錄數,等於 1 即為倒數第二條。適用於無自增主鍵或需按業務字段排序的場景。

方法三:框架整合示例

// 類 Hibernate/ActiveRecord 風格
last = HolderChangeHistory.find_by_sql(["
    SELECT * FROM holder_change_histories 
    WHERE treasure_id = ? 
    ORDER BY id DESC 
    LIMIT 1, 1
", @hch.treasure_id]);

性能對比與建議

方法適用場景性能備註
LIMIT offset有自增/唯一排序列、數據量大⭐⭐⭐⭐⭐利用索引掃描,極快
子查詢計數無自增 ID、複雜排序⭐⭐⭐全表掃描,大表慎用
雙重排序舊版本不支持 LIMIT offset⭐⭐需兩次排序,效率低

最佳實踐:表設計時確保有自增主鍵或唯一遞增排序列,直接使用 ORDER BY id DESC LIMIT 1,1。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved