[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Очень медленная работа PDO
McLotos
Всем привет, есть запрос, который получает данные с нескольких таблиц,
Сам запрос
select
{тут список из 65 полей 6 таблиц}
from `borrowers`
left join `requests` on `requests`.`borrower_id` = `borrowers`.`id`
left join `borrower_addresses` on `borrower_addresses`.`borrower_id` = `borrowers`.`id`
left join `borrower_contacts` on `borrower_contacts`.`borrower_id` = `borrowers`.`id`
left join `borrower_add_contacts` on `borrower_add_contacts`.`borrower_id` = `borrowers`.`id`
left join `borrower_infos` on `borrower_infos`.`borrower_id` = `borrowers`.`id`
напрямую через консоль mysql отрабатывает за 0,2 секунды и выдает около 3000 строк результата, а через PDO он работает больше минуты и в итоге сервер говорит 504
Профайлер говорит что самый медленный участок проекта это PDO::fetchAll() - больше 30 секунд, такое вообще может быть?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Valick
Цитата (McLotos @ 19.06.2020 - 07:20)
напрямую через консоль mysql отрабатывает за 0,2 секунды

с параметром SQL_NO_CACHE ?
что говорит EXPLAIN ?
о чём "молчит" slow log?



_____________
Стимулятор ~yoomoney - 41001303250491
miketomlin
fetchAll() – это уже не запрос, а преобразование выборки из внутр. формата в «переносимый». Может, вы там запросили создание массива из 3000 объектов wink.gif
miketomlin
Как вариант, можно преобразовывать выборки целиком в переносимый формат, только если это требуется какому-то (стороннему) компоненту, а в остальных случаях использовать fetch() в цикле вплоть до вывода wink.gif Я часто изучаю код коллег-«оптимизаторов», которые делают именно так, правда, там о PDO вообще речи обычно не идет, т.к. у него есть какие-то проблемы с одновременным хранением множества выборок. Когда спрашиваю про это, начинают плеваться (на PDO) smile.gif
McLotos
Цитата (Valick @ 19.06.2020 - 14:04)
с параметром SQL_NO_CACHE ?

да
Цитата (Valick @ 19.06.2020 - 14:04)
что говорит EXPLAIN ?

explain
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| 1 | SIMPLE | borrowers | NULL | ALL | NULL | NULL | NULL | NULL | 317 | 100.00 | NULL |
| 1 | SIMPLE | requests | NULL | ALL | NULL | NULL | NULL | NULL | 350 | 100.00 | Using where; Using join buffer (Block Nested Loop) |
| 1 | SIMPLE | borrower_addresses | NULL | ref | borrower_id | borrower_id | 4 | db.borrowers.id | 1 | 100.00 | NULL |
| 1 | SIMPLE | borrower_contacts | NULL | ref | borrower_id | borrower_id | 4 | db.borrowers.id | 3 | 100.00 | NULL |
| 1 | SIMPLE | borrower_add_contacts | NULL | ref | borrower_id | borrower_id | 4 | db.borrowers.id | 2 | 100.00 | NULL |
| 1 | SIMPLE | borrower_infos | NULL | ref | borrower_id | borrower_id | 4 | db.borrowers.id | 1 | 100.00 | NULL |

Цитата (Valick @ 19.06.2020 - 14:04)
о чём "молчит" slow log?

в slow log тишина

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
Цитата (miketomlin @ 19.06.2020 - 14:23)
fetchAll() – это уже не запрос, а преобразование выборки из внутр. формата в «переносимый». Может, вы там запросили создание массива из 3000 объектов wink.gif

да, там стоит PDO::FETCH_ASSOC, это может создать проблему?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.