下面我們一起來看看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.' 秒。';
?>