免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MYSQL數(shù)據(jù)庫時間字段INT,TIMESTAMP,DATETIME性能效率比較
正 文:

   在數(shù)據(jù)庫設(shè)計的時候,我們經(jīng)常會需要設(shè)計時間字段,在MYSQL中,時間字段可以使用int、timestamp、datetime三種類型來存儲,那么這三種類型哪一種用來存儲時間性能比較高,效率好呢?飄易就這個問題,來一個實踐出真知吧。


MYSQL版本號:5.5.19


建立表:

CREATE TABLE IF NOT EXISTS `datetime_test` (  `id` int(11) NOT NULL,  `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;ALTER TABLE `datetime_test`  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=1;

插入100萬條測試數(shù)據(jù):

  1. <?php header( 'Content-Type: text/html; charset=UTF-8' );
  2. set_time_limit(300); //最大執(zhí)行時間這里設(shè)置300秒
  3. //連接數(shù)據(jù)庫
  4. $pdo = new PDO("mysql:host=localhost;dbname=test","root","123"); 
  5. for ($i = 1; $i <= 1000000; $i++) { 
  6. $d_int=$i;
  7. $pdo->exec("insert into datetime_test(d_int,d_timestamp,d_datetime) 
  8. values($d_int,FROM_UNIXTIME($d_int),FROM_UNIXTIME($d_int))");
  9. }

取中間的20萬條做查詢測試:

SELECT FROM_UNIXTIME(400000), FROM_UNIXTIME(600000)1970-01-05 23:06:40, 1970-01-08 06:40:00


第一種情況,MyISAM引擎, d_int/d_timestamp/d_datetime這三個字段都沒有索引


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內(nèi)置函數(shù)查詢效率很高,幾乎和int相當(dāng);直接和日期比較效率低。


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內(nèi)置函數(shù)查詢效率很低,不建議;直接和日期比較,效率還行。


第二種情況,MyISAM引擎, d_int/d_timestamp/d_datetime這三個字段都有索引


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類型,有索引的效率反而低了,飄易的猜測是由于設(shè)計的表結(jié)構(gòu)問題,多了索引,反倒多了一個索引查找。


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類型,有沒有索引貌似區(qū)別不大。


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類型,有索引反而效率低了。


第三種情況,InnoDB引擎, d_int/d_timestamp/d_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引擎的查詢效率明細(xì)比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內(nèi)置函數(shù)查詢效率同樣高出直接和日期比較。


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內(nèi)置函數(shù)查詢。


第四種情況,InnoDB引擎, d_int/d_timestamp/d_datetime這三個字段都有索引


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內(nèi)置函數(shù)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內(nèi)置函數(shù)UNIX_TIMESTAMP查詢了。


【總結(jié)】:

對于MyISAM引擎,不建立索引的情況下(推薦),效率從高到低:int > UNIX_TIMESTAMP(timestamp) > datetime(直接和時間比較)>timestamp(直接和時間比較)>UNIX_TIMESTAMP(datetime) 。


對于MyISAM引擎,建立索引的情況下,效率從高到低: UNIX_TIMESTAMP(timestamp) > int > datetime(直接和時間比較)>timestamp(直接和時間比較)>UNIX_TIMESTAMP(datetime) 。


對于InnoDB引擎,沒有索引的情況下(不建議),效率從高到低:int > UNIX_TIMESTAMP(timestamp) > datetime(直接和時間比較) > timestamp(直接和時間比較)> UNIX_TIMESTAMP(datetime)。


對于InnoDB引擎,建立索引的情況下,效率從高到低:int > datetime(直接和時間比較) > timestamp(直接和時間比較)> UNIX_TIMESTAMP(timestamp) > UNIX_TIMESTAMP(datetime)。


一句話,對于MyISAM引擎,采用 UNIX_TIMESTAMP(timestamp) 比較;對于InnoDB引擎,建立索引,采用 int 或 datetime直接時間比較。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MySQL”海量數(shù)據(jù)”查詢性能分析
時間戳(Unix timestamp)轉(zhuǎn)換工具
MySQL數(shù)據(jù)庫介紹
復(fù)雜的時間判斷,搞得頭疼,記住我的這些代碼吧
MySQL查詢優(yōu)化實戰(zhàn)篇
Mysql開發(fā)實踐8問,你能hold住幾個?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服