2015-06-04 61 views
-2

我在結果集中有4000行的查詢。如果我在像Heidisql這樣的查詢瀏覽器中執行這個查詢,我會在0.5秒內獲得所有4000行。如果我在我的Internet瀏覽器中查看print_r($result);,我可以在30秒內獲得所有數據。這是一個很大的區別! 我已經嘗試過與mysqli和PDO它是同樣的問題。 這是一個來自兩列(含左連接)和18列的簡單查詢。 我有一個地方在我的查詢和所有審覈規定被索引 我有一個MySQL 5.1的PHP 5.3mysql結果集在php輸出中速度很慢

下面的代碼(2指數!):

$db_handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db_handle->setAttribute(PDO::ATTR_AUTOCOMMIT, false); 
$time_start = microtime(true); 

$sqlCFf = " 
SELECT .... 
"; 
$result_set = $db_handle->query($sqlCFf); 

$result = $result_set -> fetchAll(); 
print_r ($result); 

$time_end = microtime(true); 

$time_res = $time_end - $time_start; 

在這裏,結果從EXPLAIN:

1 SIMPLE f range center center 20  51000 Using index condition; Using where; Using MRR 
1 SIMPLE g ref compte compte 62 func 1 Using where 

如果有人想出更快的輸出在PHP?

THX提前

+0

第一件事第一 - 運行'解釋查詢的select',共享結果到的問題。 –

+0

你如何得到'$ result'?你的結果中是否有任何「text」或「blob」列?是同一臺機器上的數據庫和PHP代碼?...如果它是HeidiSQL中的相同查詢,並且從PHP調用時,則是在MySQL和PHP之間或者在網絡服務器和瀏覽器之間傳輸或者處理PHP代碼 – cypherabe

+0

中的數據時,當你說'print_r($ result);'時,你是否將該代碼放入循環中?循環在30秒內結束? –

回答

0

使用EXPLAIN

EXPLAIN SELECT * FROM tablename 

瞭解EXPLAIN的輸出

  id: 1 
    select_type: SIMPLE 
     table: categories 
     type: ALL 
possible_keys: NULL 
      key: NULL 
     key_len: NULL 
      ref: NULL 
     rows: 4 
     Extra: 
1 row in set (0.00 sec) 
0

據我所知,打印結果在任何編程語言會大量消耗資源/時間..

從代碼:

$result = $result_set -> fetchAll(); 
print_r ($result); 
//you try to record the end time after printing then it will took longer and not a reliable approach 
$time_end = microtime(true); 

嘗試重新安排你這樣的代碼:

$result = $result_set -> fetchAll(); 

//put it here, then it will record the end time before printing, which is the right way to benchmark 
$time_end = microtime(true); 
print_r ($result); 
+0

我得到這個:0.49998712539673秒,但30秒後我通過print_r獲取所有數據。這是非常長的。 – achillix

+0

讓我們嘗試不同的方法..不要使用'print_r()',而是嘗試將結果傳遞到瀏覽器並使用JS使用'console.log()'進行打印。看到不同。 –

+0

對不起,從來沒有用過console.log,真是太酷了。所以我把我的時間後的console.log,他在5秒內​​完成!這是非常好的。我怎樣才能得到這個性能到我的輸出? – achillix