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

123
V
На сайте с 10.01.2012
Offline
85
#11
temniy #:

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

Это банальная опечатка, а не рукожопость. И она выдаст только предупреждение,  что данной переменной не существует, а не замедляем выполнение до полутора часа...

Вопрос решил сам, ковыряя мануалы... Проблема была в том, что выборка включает в себе вложенные выборки и по каждому WHERE нужны многоколоночные индексы. phpMyadmin их имитирует на этапе PREPARE. А для php нужно указывать самому.

Вот про виртуализацию индексов phpMyadmin а узнал спустя 5 дней гугленья.

ДП
На сайте с 23.11.2009
Offline
203
#12
Ссылку бы хоть что-ли дали на статью про такое.
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#13

Чего-чего phpmyadmin имитирует? 

И чего надо указывать там в PHP?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
V
На сайте с 10.01.2012
Offline
85
#14
LEOnidUKG #:
Чего-чего phpmyadmin имитирует? 

Не имитирует а определяем нужные поля индексов и создает временную таблицу с ними на этапе PREPARE. После СОMPLETE она сразу удаляется. Так как будто бы они были добавлены в саму структуру БД.

Я не особо силен в терминологии, поэтому извините за мой французкий.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#15
Varenik #:

Не имитирует а определяем нужные поля индексов и создает временную таблицу с ними на этапе PREPARE. После СОMPLETE она сразу удаляется. Так как будто бы они были добавлены в саму структуру БД.

Я не особо силен в терминологии, поэтому извините за мой французкий.

Ссылку на данную информацию скиньте, я так понимаю источник зарубежный.

V
На сайте с 10.01.2012
Offline
85
#16
LEOnidUKG #:

Ссылку на данную информацию скиньте, я так понимаю источник зарубежный.

Ближе к вечеру постараюсь найти в истории.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#17
Varenik #:

Ближе к вечеру постараюсь найти в истории.

И что вы в PHP подставляли?
V
На сайте с 10.01.2012
Offline
85
#18
LEOnidUKG #:
И что вы в PHP подставляли?

В php ничего. Просто создав многостолбцовый индекс и подкорректировал запрос, указал его приоритетным. Время выполнения стало отличаться на %%5 максимум

USE INDEX (search_current_status_iDx) 
SELECT 
    orders.id,
    ...
    (SELECT current_status FROM ord_status_log USE INDEX (search_current_status_iDx) WHERE ... ORDER BY id DESC LIMIT 1) as status_id
    ...
FROM orders
WHERE orders.date ...
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#19

Версия MySQL какая?

Просто создание индекса не меняет дело? 

Только указывать его принудительно? Это очень редкая ситуация.

V
На сайте с 10.01.2012
Offline
85
#20
LEOnidUKG #:

Версия MySQL какая?

Просто создание индекса не меняет дело? 

Только указывать его принудительно? Это очень редкая ситуация.

mysqlnd 5.0.12-dev - 20150407

В запросе во вложенной секции WHERE до 5 условий. 

ситуация 1: 5 условий, имеются индексы по 1 столбцу - запрос в myadmin выполняется ~5 секунд, скриптом php - около часа.

ситуация 2:  5 условий, имеется группированный индекс по 5 столбцам  - запрос в myadmin выполняется ~3.5-4 секунды, скриптом php - около часа.

ситуация 3:  5 условий, имеется группированный индекс по 5 столбцам с его принудительным указанием (USE INDEX ...)  - запрос в myadmin выполняется ~3.5-4 секунды, скриптом php ~4.5 секунд.

Вот такая картина. И мне она непонятна была пока не наткнулся на указанное выше объяснение. Но факт является фактом - проблема решилась.

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий