2014-11-04 90 views
1

是我讀過的文檔hereMySQL的選擇月從某個特定年份

我有以下查詢:

SELECT * FROM db.table 
WHERE event_type = 3 
AND (YEAR(event_time) = 2014 AND MONTH(event_time) = 10) 

從這個2014年10月大返回所有記錄。只想問一下,有沒有比編寫(YEAR(event_time) = 2014 AND MONTH(event_time) = 10)更短,更好或更整齊的方法?這是在特定年份提取特定月份的「常規」方式嗎?

在這裏學習。

+0

在您的方法中看不到任何東西在燃燒。 – Rahul 2014-11-04 14:55:12

+1

'where'event_time'2014-10%''在那裏工作嗎? – skobaljic 2014-11-04 14:57:19

回答

3

如果您有event_time列的索引,則使用YEARMONTH(或幾乎任何函數)將阻止索引被完全優化查詢。像這樣的東西會最快;我會留給你,以確定它是否是最新的:

SELECT * FROM db.table 
WHERE event_type = 3 
    AND event_time >= '2014-10-01' AND event_time < '2014-11-01' 

這將給你在2014年10月的一切,它是完全優化。

+1

這可以帶來顯着的性能優勢。 – Strawberry 2014-11-04 14:57:14

+0

我在選擇時間之間的記錄時遇到很大問題,必須經過測試。加入它時,我意味着在巨大的桌子上花了很多時間來執行。 – skobaljic 2014-11-04 14:58:32

+0

對我來說,記住它似乎更簡單,並且最好的做法是給這個方法引用索引 - 謝謝你的答案 – 2014-11-04 15:13:00

0

您可以使用2014年記錄的with子句創建一個臨時視圖,然後僅從該視圖中提取10月份。

因爲每次查詢需要檢查它是2014年還是10月份。

所以我認爲意見會做得更好。

您還可以通過添加索引來提高性能

相關問題