下面我們一起來看看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']." | ";
- }
- /*········以上是代碼區·········*/
- //Vevb.com
- //程序運行時間
- $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.' 秒。';
- ?>
新聞熱點
疑難解答