2015-06-04 3 views
-2

У меня есть запрос с 4000 строк в наборе результатов. Если я выполню этот запрос в браузере запросов, например Heidisql, я получаю все 4000 строк за 0,5 секунды. Если я сделаю print_r($result); для просмотра внутри своего браузера Internet, я получаю все данные за 30 секунд. Это большая разница! Я попытался с mysqli и PDO, это та же проблема. Это простой запрос от twotable (с левым соединением) с 18 столбцами. У меня есть где в моем запросе и все критерии индексируются У меня есть MySQL 5.1 с PHP 5.3mysql resultset очень медленный в 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'? это DB и 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

Смежные вопросы