最近開發乙個功能時需要查詢今天開播的主播使用者。在業務上我們有乙個資料表儲存了主播每次開播的記錄。表中有乙個時間型別的字段表示主播開播時間。(為了業務安全,這裡用time欄位表明實際欄位. record表示資料表)
在開始實現的時候想到的就是time = 今天這種實現邏輯上比較直接。
實現思路select distinct userid
from record
where date_format(time, '%y%m%d')=
date_format(now(), '%y%m%d')
具體實現(也可以從服務層穿參這樣sql顯的就不複雜了):select
distinct userid
from record
where
time
>=
'yyyy-mm-dd 00:00:00'
andtime
<=
'yyyy-mm-dd 23:59:59'
first rowselect
distinct userid from record
where
time
>=
(select str_to_date(date_format(
now(),
'%y-%m-%d'),
'%y-%m-%d %h:%i:%s'))
andtime
<=
(select date_add( date_add(str_to_date(date_format(
now(),
'%y-%m-%d'),
'%y-%m-%d %h:%i:%s'),
interval
1day),
interval-1
second))
;
second row
30003
first time
second time
3300ms
4ms原因是date_format這種需要對日期進行轉換,需要查詢出所有行進行過濾。而第二種可以利用在time上建立索引,查詢極快。
mysql欄位型別優化
選型原則 在保證足夠用的前提下盡量選擇最小型別!儲存人的年齡應該使用哪種資料型別?答 使用 tinyint 型別 無符號型 儲存烏龜的年齡應該使用哪種資料型別?答 使用 smallinit 型別 無符號型 儲存乙個 1500 萬資料的資料表其主鍵 id應該選擇哪種資料型別?答 使用 mediumin...
mysql 關於日期時間的字段型別
mysql有5種表示時間值的日期和時間型別,分別為 date,time,year,datetime,timestamp。timestamp型別有專有的自動更新特性,timestamp型別有專有的自動更新特性,timestamp型別有專有的自動更新特性,型別大小 位元組 範圍格式 用途date 310...
mysql 關於日期時間的字段型別
mysql有5種表示時間值的日期和時間型別,分別為 date,time,year,datetime,timestamp。timestamp型別有專有的自動更新特性,timestamp型別有專有的自動更新特性,timestamp型別有專有的自動更新特性,型別大小 位元組 範圍格式 用途date 310...