程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> php date()和sql FROM_UNIXTIME() 的效率比較

php date()和sql FROM_UNIXTIME() 的效率比較

編輯:MySQL綜合教程

下面我們一起來看看php date()和sql FROM_UNIXTIME() 的效率比較吧,到底是那個的性能要好一些呢,一起看實例。

在php中,將int型的時間戳轉換為日期時間,有兩種方法,一種是用我們熟悉的函數date("Y-m-d H:i",time())來轉換;還有一種是在sql中用 FROM_UNIXTIME(add_time, "%Y-%m-%d %H:%m") 轉換,平時用的不多,估計很多人都還不知道吧。

為了了解他們之間的效率和區別,我做了一個實例。先建了一張表,只添加了兩個字段,一個是自增長的id,一個是int型的時間,添加兩條數據後,再用自我復制語句 insert into t1 (add_time) select add_time from t1 將表迅速的復制到10萬多條數據,用於測試。


程序很簡單,就是比較在mysql中轉換和在php中轉換執行時間比較。

每塊代碼我執行了很多遍,我從中取出的一個比較適中的時間,現在從下圖可以很明顯的看出在數據庫中用 FROM_UNIXTIME() 函數比 php 的 date() 函數要高效的多,不過我們不能忽略mysql數據庫執行的開銷。所以在不考慮數據庫開銷的情況下 FROM_UNIXTIME() 是快速的。


PHP源碼參考:

 代碼如下 復制代碼

<?php

 header("Content-type:text/html;charset=utf-8");

 //程序運行時間

 $starttime = explode(' ',microtime());

 


 /*········以下是代碼區·········*/

 $link = mysql_connect("localhost","root","root");

 mysql_select_db("test");

 mysql_query("set names utf8");

 $sql = "select add_time from t1 limit 100000";

 $res = mysql_query($sql,$link);

 $num = mysql_num_rows($res);

 while($row = mysql_fetch_array($res)){

  //echo date("Y-m-d H:i",$row['add_time'])." | ";

 }

 /*········以上是代碼區·········*/

 


 //程序運行時間

 $endtime = explode(' ',microtime());

 $thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]);

 $thistime = round($thistime,3);

 echo '<hr/>本次通過 PHP 中 date("Y-m-d H:i",$row["add_time"]) 轉換。<br/> 轉換本次轉換 '.$num.' 條數據。<br/>本次執行耗時:'.$thistime.' 秒。';

 


 //--------------------------------------------------------

 //--------------------------------------------------------

 //程序運行時間

 $starttime = explode(' ',microtime());

 


 /*········以下是代碼區·········*/

 $sql = "select add_time from t1 limit 100000";

 $res = mysql_query($sql,$link);

 $num = mysql_num_rows($res);

 while($row = mysql_fetch_array($res)){

  echo $row['add_time']." | ";

 }

 /*········以上是代碼區·········*/

 


 //程序運行時間

 $endtime = explode(' ',microtime());

 $thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]);

 $thistime = round($thistime,3);

 echo '<hr/>本次直接輸出,沒任何轉換<br/>本次執行耗時:'.$thistime.' 秒。';

 


 //--------------------------------------------------------

 //--------------------------------------------------------

 //程序運行時間

 $starttime = explode(' ',microtime());

 


 /*········以下是代碼區·········*/

 $sql = "select FROM_UNIXTIME( add_time, '%Y-%m-%d %H:%m' ) as add_time from t1 limit 100000";

 $res = mysql_query($sql,$link);

 $num = mysql_num_rows($res);

 while($row = mysql_fetch_array($res)){

  //echo $row['add_time']." | ";

 }

 /*········以上是代碼區·········*/


 //程序運行時間

 $endtime = explode(' ',microtime());

 $thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]);

 $thistime = round($thistime,3);

 echo '<hr/>本次通過 mysql 中 FROM_UNIXTIME( add_time, "%Y-%m-%d %H:%m" ) 轉換。<br/> 轉換本次轉換 '.$num.' 條數據。<br/>本次執行耗時:'.$thistime.' 秒。';

?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved