|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
есть такой код Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
почему время выполнения запроса растет линейно? в начале время 0.00062894821166992 на строке 80 тыс было время 0.096501111984253 работал минут 10, дальше не стал ждать запрос писал не я, обнаружил при отладке хочу понять почему такое поведение? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 08:52 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
если заменить WHERE `id_image` = '.intval($i).' на WHERE `id_image` = 1 в цикле, то скорость не уменьшается ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 09:00 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
вместо 1 любое постоянное число-скорость не уменьшается ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 09:02 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
tadeyilodaвместо 1 любое постоянное число-скорость не уменьшается А почему вдруг скорость уменьшаться должна? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 09:26 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
потому что при такой записи WHERE `id_image` = '.intval($i).' скорость уменьшается ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 09:30 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
tadeyiloda, Что мы видим в коде: 1. В заголовке цикла переменной $i присваивается целое число. 2. intval($i) берет целую часть от целочисленного $i. Нафига оно, если значение не изменяется? 3. Далее при сборке строки запроса выполняется неявное преобразование целого в строку и только потом происходит конкатенация. При таком раскладе было бы гораздо более правильным на втором шаге целочисленное привести к строковому типу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 10:15 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
tadeyiloda, планы выполнения запросов посмотреть, конечно же, вы не догадались? В целом, есть подозрение, что оптимизатор неверно рассчитывает кардинальность подзапроса при параметрическом задании условия и гораздо точнее это делает - при константном варианте. Это приводит в дальнейшем к корявой трансформации запроса и неправильному (неоптимальному) способу доступа к данным и соединения наборов данных. Отсюда и разность в скорости исполнения ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 10:18 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
по самому запросу есть что сказать? почему скорость уменьшается ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 10:18 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
tadeyilodaпо самому запросу есть что сказать? почему скорость уменьшается запрос - го*но, да ещё и в цикле ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 11:05 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
tadeyilodaпо самому запросу есть что сказать? 1. Запрос плохой. 2. Запрос кешируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 12:12 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
то что запрос плохой я не спорю, но изза чего так сильно падает скорость? если после завершения цикла запустить его заново, то вначале опять скорость высокая, и затем падает со временем ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 12:33 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
Скорость падает из-за кривого запроса, который использует ресурсы сервера неэффективно. Нужно изучать статистику и план выполнения, чтобы выяснить, где именно получается узкое место. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 12:40 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
explain то будет не? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 12:47 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:06 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
подзапрос константный, он выполняется один раз а затем для каждой строки проверяется совпадение url дичайший запрос нельзя написать так? Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:29 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
или в оригинальном запросе скрыт какой-то тайный смысл? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:31 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
Дегтярев Евгенийили в оригинальном запросе скрыт какой-то тайный смысл?Так понимаю, что запросом нужно найти все картинки, которые по полю `url` совпадают с заданной по ID картинкой, при условии, что `url` не пустая строка. Нечто вроде "по заданной картинке найти остальные картинки для статьи (альбома, веб-страницы и т.п.)" Однако, исходной задачи - для чего оно надо и что должно получиться на выходе мы не знаем. Возможно, зная задачу можно было бы оптимизировать и запрос и, возможно, таблицу. Из очевидного. Поле `url` не проиндексировано, но принимает участие в WHERE, а это заставляет движок просматривать всю таблицу. К тому же, поле имеет тип TEXT, который, если правильно понимаю внутреннюю кухню, работает медленнее, чем CHAR, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 19:52 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
Дегтярев Евгенийподзапрос константный, он выполняется один разЗависит от версии MySQL. Версии до 5.6 (это не точно) выполняли подзапрос на каждую проверку. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 21:34 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
miksoft, не спорю что зависит от версии, исходил из показанного плана ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 05:28 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
vkleТак понимаю, что запросом нужно найти все картинки, которые по полю `url` совпадают с заданной по ID картинкой, при условии, что `url` не пустая строка. Нечто вроде "по заданной картинке найти остальные картинки для статьи (альбома, веб-страницы и т.п.)" тогда задача решена весьма криво vkleИз очевидного. Поле `url` не проиндексировано, но принимает участие в WHERE, а это заставляет движок просматривать всю таблицу. К тому же, поле имеет тип TEXT, который, если правильно понимаю внутреннюю кухню, работает медленнее, чем CHAR, например. как вариант, добавить поле фикс длины, содержащее хеш url, + индекс по нему ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 06:13 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
Дегтярев Евгенийтогда задача решена весьма кривоУгу. Что за задача - это лишь мое предположение, а ТС пока не озвучил, что за задача там на самом деле решается. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 13:25 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
про задачу ничего не скажу мне дали код, который при длительной работе сильно замедлялся после отладки нашел этот запрос и очень удивился, я привык что запрос выполняется или медленно или быстро а тут запрос вначале выполняется быстро а затем скорость начинает линейно падать ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 13:33 |
|
запрос замедлился в 100 раз
|
|||
---|---|---|---|
#18+
tadeyilodaя привык что запрос выполняется или медленно или быстро а тут запрос вначале выполняется быстро а затем скорость начинает линейно падатьВ общем случае на время выполнения запроса влияет туева хуча причин, притом, некоторые из них весьма неочевидны. Например, из неочевидного: Висит ли таблица в каждый конкретный момент целиком в памяти или сервер вынужден перечитывать ее с диска целиком или частично. Берутся ли готовые возвращаемые данные из кеша запросов или запрос должен отработать полностью на таблице. Наличие каких-то других обращений к серверу в это же время. Если хотите разобраться с природой тормозов, тогда придется как-то контролировать и эти и подобные вещи. Про очевидные проблемы выше уже написали. Ещё момент. В приведенном коде вычисляется время работы какого-то метода какого-то класса, а не время выполнения запроса непосредственно. Что скрывается за Db::getInstance()->getRow() и как оно влияет на результат измерения мы не знаем. Может и никак не влияет, а может при каждом вызове плодит где-то внутри новый экземпляр класса, под который надо выделить память и т.д... tadeyilodaпро задачу ничего не скажу мне дали код, который при длительной работе сильно замедлялсяДали код с целью просто посмотреть на него, дабы впредь так не делать? В общем, да, хороший пример. Или, всё же, призвали приложить усилия к устранению проблем с тормозами? ;-) В последнем случае без понимания решаемой кодом задачи сложно ее решать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 16:31 |
|
|
start [/forum/topic.php?fid=47&msg=39827449&tid=1829089]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 172ms |
0 / 0 |