<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
在資料庫設計的時候,我們經常會需要設計時間欄位,在 MYSQL 中,時間欄位可以使用 int、timestamp、datetime 三種型別來儲存,那麼這三種型別哪一種用來儲存時間效能比較高,效率好呢 ?
就這個問題,來一個實踐出真知吧。
CREATE TABLE IF NOT EXISTS `datetime_test` ( `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=1, `d_int` int(11) NOT NULL DEFAULT '0', `d_timestamp` timestamp NULL DEFAULT NULL, `d_datetime` datetime DEFAULT NULL ) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8;
//插入d_intvalue=1到100萬之間的資料 insert into datetime_test(d_int,d_timestamp,d_datetime) values(d_intvalue,FROM_UNIXTIME(d_intvalue),FROM_UNIXTIME(d_intvalue));
取中間的 20 萬條做查詢測試:
SELECT FROM_UNIXTIME(400000), FROM_UNIXTIME(600000) 1970-01-05 23:06:40, 1970-01-08 06:40:00
//SQL_NO_CACHE意思是說查詢時不適用快取 SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_int >400000 AND d_int<600000 查詢花費 0.0780 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_int>UNIX_TIMESTAMP('1970-01-05 23:06:40') AND d_int<UNIX_TIMESTAMP('1970-01-08 06:40:00') 查詢花費 0.0780 秒
效率不錯
SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_timestamp>'1970-01-05 23:06:40' AND d_timestamp<'1970-01-08 06:40:00' 查詢花費 0.4368 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE UNIX_TIMESTAMP(d_timestamp)>400000 AND UNIX_TIMESTAMP(d_timestamp)<600000 查詢花費 0.0780 秒
對於 timestamp 型別,使用UNIX_TIMESTAMP內建函數查詢效率很高,幾乎和int相當;直接和日期比較效率低。
SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_datetime>'1970-01-05 23:06:40' AND d_datetime<'1970-01-08 06:40:00' 查詢花費 0.1370 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE UNIX_TIMESTAMP(d_datetime)>400000 AND UNIX_TIMESTAMP(d_datetime)<600000 查詢花費 0.7498 秒
對於 datetime 型別,使用 UNIX_TIMESTAMP 內建函數查詢效率很低,不建議;直接和日期比較,效率還行。
SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_int >400000 AND d_int<600000 查詢花費 0.3900 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_int>UNIX_TIMESTAMP('1970-01-05 23:06:40') AND d_int<UNIX_TIMESTAMP('1970-01-08 06:40:00') 查詢花費 0.3824 秒
對於 int 型別,有索引的效率反而低了,筆者估計是由於設計的表結構問題,多了索引,反倒多了一個索引查詢。
SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_timestamp>'1970-01-05 23:06:40' AND d_timestamp<'1970-01-08 06:40:00' 查詢花費 0.5696 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE UNIX_TIMESTAMP(d_timestamp)>400000 AND UNIX_TIMESTAMP(d_timestamp)<600000 查詢花費 0.0780 秒
對於 timestamp 型別,有沒有索引貌似區別不大。
SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_datetime>'1970-01-05 23:06:40' AND d_datetime<'1970-01-08 06:40:00' 查詢花費 0.4508 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE UNIX_TIMESTAMP(d_datetime)>400000 AND UNIX_TIMESTAMP(d_datetime)<600000 查詢花費 0.7614 秒
對於 datetime 型別,有索引反而效率低了。
SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_int >400000 AND d_int<600000 查詢花費 0.3198 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_int>UNIX_TIMESTAMP('1970-01-05 23:06:40') AND d_int<UNIX_TIMESTAMP('1970-01-08 06:40:00') 查詢花費 0.3092 秒
InnoDB 引擎的查詢效率明細比 MyISAM 引擎的低,低 3 倍+。
SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_timestamp>'1970-01-05 23:06:40' AND d_timestamp<'1970-01-08 06:40:00' 查詢花費 0.7092 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE UNIX_TIMESTAMP(d_timestamp)>400000 AND UNIX_TIMESTAMP(d_timestamp)<600000 查詢花費 0.3160 秒
對於 timestamp 型別,使用 UNIX_TIMESTAMP 內建函數查詢效率同樣高出直接和日期比較。
SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_datetime>'1970-01-05 23:06:40' AND d_datetime<'1970-01-08 06:40:00' 查詢花費 0.3834 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE UNIX_TIMESTAMP(d_datetime)>400000 AND UNIX_TIMESTAMP(d_datetime)<600000 查詢花費 0.9794 秒
對於 datetime 型別,直接和日期比較,效率高於 UNIX_TIMESTAMP 內建函數查詢。
SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_int >400000 AND d_int<600000 查詢花費 0.0522 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_int>UNIX_TIMESTAMP('1970-01-05 23:06:40') AND d_int<UNIX_TIMESTAMP('1970-01-08 06:40:00') 查詢花費 0.0624 秒
InnoDB引 擎有了索引之後,效能較 MyISAM 有大幅提高。
SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_timestamp>'1970-01-05 23:06:40' AND d_timestamp<'1970-01-08 06:40:00' 查詢花費 0.1776 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE UNIX_TIMESTAMP(d_timestamp)>400000 AND UNIX_TIMESTAMP(d_timestamp)<600000 查詢花費 0.2944 秒
對於 timestamp 型別,有了索引,反倒不建議使用 MYSQL 內建函數UNIX_TIMESTAMP 查詢了。
SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_datetime>'1970-01-05 23:06:40' AND d_datetime<'1970-01-08 06:40:00' 查詢花費 0.0820 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE UNIX_TIMESTAMP(d_datetime)>400000 AND UNIX_TIMESTAMP(d_datetime)<600000 查詢花費 0.9994 秒
對於 datetime 型別,同樣有了索引,反倒不建議使用 MYSQL 內建函數UNIX_TIMESTAMP 查詢了。
到此這篇關於MYSQL 資料庫時間欄位 INT,TIMESTAMP,DATETIME 效能效率的比較介紹的文章就介紹到這了,更多相關MYSQL 時間欄位 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45