最後一排我有一個包含一個表: 平衡,CLIENT_ID,日期SQL - 獲取日期範圍
這個表有〜25萬行 - 大多數時候,一個服務執行,併爲每個客戶端創建一個新的行,與今天的日期和客戶的平衡。
在日期範圍內,可以說2016年1月1日至2016年5月12日,我需要得到第一行和最後一行。
*該服務不會每天運行,因此日期= 12/05/2016將不起作用。如果今天的餘額等於昨天的餘額,則不插入行(節省了我約90%的數據,如果我正確計算,應該是3億行)
爲此,我運行這兩個查詢: 獲得第一個日期:6.9433851242065 seconds
SELECT * FROM (SELECT * FROM daily
WHERE TIME >= '01/01/2016' AND TIME < '13/05/2016') dates
GROUP BY Client_ID
獲得最後日期:32.034277915955 seconds
SELECT * FROM (SELECT * FROM daily
WHERE TIME >= '01/01/2016' AND TIME < '13/05/2016'
ORDER BY Date DESC) dates
GROUP BY Client_ID
第一個查詢沒有訂單,因爲行以正確的順序總是插入,通過上述服務 - 和成功h要快得多。 (7/32)
如何使兩個查詢更快,或者至少是第二個?
查詢說明:
- 獲取行其中的日期爲2016年1月1日之後
- 第一次約會獲取行其中的日期爲13/05/2016 之前的最後日期
編輯:檢查答案給了我下面的:
ASC和DESC是我的,「組合拳」是建議的答案
dates_ASC:33.300458192825
dates_DESC:8.9232740402222
dates_combined:8.4357199668884
dates_ASC:5.4825110435486
dates_DESC:10.173403978348
dates_combined:2.7024359703064
- dates_ASC:15。090759038925
- dates_DESC:29.375104904175
- dates_combined:3.2885720729828
首先,你確定你需要的嵌套的SELECT?你確定你需要所有返回的字段嗎?另外,我會嘗試'SELECT TOP 1 *'。 –
爲什麼不使用'ORDER BY ASC LIMIT 1'? – C14L
哦,MySQL,是的。 LIMIT 1而不是SELECT TOP 1. –