我脸都问绿了!二面竟然被问到 MySQL 时间类型 datetime、bigint 及 timestamp 的查询效率。。。
數(shù)據(jù)庫中可以用datetime、bigint、timestamp來表示時(shí)間,那么選擇什么類型來存儲(chǔ)時(shí)間比較合適呢?
前期數(shù)據(jù)準(zhǔn)備
通過程序往數(shù)據(jù)庫插入50w數(shù)據(jù)
-
數(shù)據(jù)表:
其中time_long、time_timestamp、time_date為同一時(shí)間的不同存儲(chǔ)格式
-
實(shí)體類users
-
dao層接口
-
測試類往數(shù)據(jù)庫插入數(shù)據(jù)
生成數(shù)據(jù)代碼方至github:https://github.com/TiantianUpup/sql-test/ 如果不想用代碼生成,而是想通過sql文件倒入數(shù)據(jù),附sql文件網(wǎng)盤地址:https://pan.baidu.com/s/1Qp9x6z8CN6puGfg-eNghig
sql查詢速率測試
-
通過datetime類型查詢:
耗時(shí):0.171
-
通過timestamp類型查詢
耗時(shí):0.351
-
通過bigint類型查詢
耗時(shí):0.130s
-
結(jié)論 在InnoDB存儲(chǔ)引擎下,通過時(shí)間范圍查找,性能bigint ?> datetime > timestamp
sql分組速率測試
使用bigint 進(jìn)行分組會(huì)每條數(shù)據(jù)進(jìn)行一個(gè)分組,如果將bigint做一個(gè)轉(zhuǎn)化在去分組就沒有比較的意義了,轉(zhuǎn)化也是需要時(shí)間的
-
通過datetime類型分組:
耗時(shí):0.176s
-
通過timestamp類型分組:
耗時(shí):0.173s
-
結(jié)論 在InnoDB存儲(chǔ)引擎下,通過時(shí)間分組,性能timestamp > datetime,但是相差不大
sql排序速率測試
-
通過datetime類型排序:
耗時(shí):1.038s
-
通過timestamp類型排序
耗時(shí):0.933s
-
通過bigint類型排序
耗時(shí):0.775s
-
結(jié)論 在InnoDB存儲(chǔ)引擎下,通過時(shí)間排序,性能bigint > timestamp > datetime
小結(jié)
如果需要對時(shí)間字段進(jìn)行操作(如通過時(shí)間范圍查找或者排序等),推薦使用bigint,如果時(shí)間字段不需要進(jìn)行任何操作,推薦使用timestamp,使用4個(gè)字節(jié)保存比較節(jié)省空間,但是只能記錄到2038年記錄的時(shí)間有限
總結(jié)
以上是生活随笔為你收集整理的我脸都问绿了!二面竟然被问到 MySQL 时间类型 datetime、bigint 及 timestamp 的查询效率。。。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Java中异步编程,同事非要用rxJa
- 下一篇: 最全 | Redis可视化工具横向评测