首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 獲取「當天」與「最近 24 小時」數據的兩種 SQL 寫法對比

     編輯:MySQL 資料庫相關知識

場景一:最近 24 小時(滾動窗口)

SELECT * FROM `p8_memberdata`
WHERE regdate BETWEEN (UNIX_TIMESTAMP(NOW()) - 86400) AND NOW();
  • regdate 為 Unix 時間戳(整數)。
  • 86400 = 60*60*24 秒。
  • 適用于「過去 24 小時」、「過去 7 天」等相對時間範圍查詢。
  • 優勢: 可直接利用數值型索引,性能極佳。

場景二:自然日「今天」(日曆日)

SELECT * FROM `p8_memberdata`
WHERE DATE_FORMAT(FROM_UNIXTIME(regdate), '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d')
ORDER BY uid DESC;
  • 將時間戳轉為日期字符串比較,精確匹配「今天 00:00:00 - 23:59:59」。
  • 劣勢: 函數作用於列上導致無法使用索引,大表查詢會全表掃描。

優化建議

若 regdate 有索引且數據量大,推薦改用範圍查詢:

SELECT * FROM `p8_memberdata`
WHERE regdate >= UNIX_TIMESTAMP(DATE(NOW()))
  AND regdate <  UNIX_TIMESTAMP(DATE(NOW()) + INTERVAL 1 DAY)
ORDER BY uid DESC;

此寫法既符合「自然日」語義,又能走索引範圍掃描。

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