Mysql. Огромная разница во времени выполнения посредством php и непосредственно в phpMyadmin


Varenik
243

Собственно суть в названии самой темы.

Есть некий запрос на чтение данных, который в phpMyadmin выполняется порядка 5 секунд. Но в то же время если его запустить с php-скрипта (в скрипте только запрос на считывание и более ничего), то он выполняется 6000 (полтора часа). А еще эти данные нужно обработать и вывести итоговые данные.

Можете объяснить почему такая большая разница во времени и как можно ее сократить?


Stek

Возможно в пхпмайадмине указан LIMIT , а в скрипте вытягиваются все сто миллионов записей. 

Без примерной структуры и самого запроса, без года скрипта — ничего особо не посоветуешь.


tommy-gung
Stek #:
в пхпмайадмине указан LIMIT

но его автоматически подставляет. 0, 30 что ли


Varenik
Stek #:

Возможно в пхпмайадмине указан LIMIT , а в скрипте вытягиваются все сто миллионов записей. 

Без примерной структуры и самого запроса, без года скрипта — ничего особо не посоветуешь.

Причем здесь год скрипта — банальная выборка pdo либо mysqli с одним запросом и более ничего.

Даже если ставлю в запросе

... LIMIT ХХХ

Пропорционально запрос выполняется по тому же таймингу.


temniy

Ничего нельзя сказать без кода php. Может там циклы или еще что. 


Stek
Ну раз не при чем, то ищи проблему сам. Как понимаю ты же лучше знаешь 😀

Varenik
Stek #:
Ну раз не при чем, то ищи проблему сам. Как понимаю ты же лучше знаешь 😀

Банальный «сложный» запрос… код вида:

// Формируем тест выборка
$data = $db->query("
        SELECT data,
        (Вложеная выборка вида SELECT),
...
        (Вложеная выборка вида SELECT)
        FROM table
        WHERE УСЛОВИЕ
LIMIT 10
");

Если выставить индексы для всех WHERE (тип данных DITETIME), то  запрос выполняется на %% 30 дольше.

LIMIT также замедляет выборку в среднем на %%50. Чистая выборка обрабатывается шустрее.


totamon
Varenik :

Можете объяснить почему такая большая разница во времени и как можно ее сократить?

это тебе к экстрасенсам нужно ну или гадалке…

зы. единственное объяснение это качество кода,  phpMyadmin  не рукожопы писали, поэтому он быстрее  😀


Varenik
totamon #:

это тебе к экстрасенсам нужно ну или гадалке…

зы. единственное объяснение это качество кода,  phpMyadmin  не рукожопы писали, поэтому он быстрее  😀

<?php
$from= microtime(true);
$db = new PDO(SETTINGS);
$data = $db->query(ЗАПРОС);
echo round(microtime(true) - $start, 4);
?>

Какая рукожопость в этих 4 строчках кода? Никакой больше обработки — банальная выборка и все.


totamon
Varenik #:

Какая рукожопость в этих 4 строчках кода? Никакой больше обработки — банальная выборка и все.

нужно не гадать, а искать причину… я в своей практике не раз сталкивался с сусликом которого невидно, но он есть))

для начала вывести запрос и сравнить с тем что в phpmyadmin формируется, или вставить запрос из phpmyadmin в скрипт.

дело явно не в php,  а в запросе


temniy
Varenik #:

Какая рукожопость в этих 4 строчках кода? Никакой больше обработки — банальная выборка и все.

Да, например, вот — не инициализированная переменная $start — вместо нее должна быть видимо $from.  

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *