mysql時間型別欄位的優化技巧

2021-09-10 21:15:24 字數 1152 閱讀 9737

最近開發乙個功能時需要查詢今天開播的主播使用者。在業務上我們有乙個資料表儲存了主播每次開播的記錄。表中有乙個時間型別的字段表示主播開播時間。(為了業務安全,這裡用time欄位表明實際欄位. record表示資料表)

在開始實現的時候想到的就是time = 今天這種實現邏輯上比較直接。

select distinct userid

from record

where date_format(time, '%y%m%d')=

date_format(now(), '%y%m%d')

實現思路

select

distinct userid

from record

where

time

>=

'yyyy-mm-dd 00:00:00'

andtime

<=

'yyyy-mm-dd 23:59:59'

具體實現(也可以從服務層穿參這樣sql顯的就不複雜了):

select

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))

;

first row

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...