LEFT JOIN медленный если есть ORDER BY

123
IL
На сайте с 20.04.2007
Offline
435
#11
LEOnidUKG:
И прям спасает ситуацию?

Прям да.. =) А почему нет? MySQL поумнел, но ещё есть к чему стремиться..

Ан нет.. нифига не поможет..

В общем, если структуру не изменять (rating в первую таблицу не выносить) всё так же вижу один из вариантов:

а) Уходить от JOIN-а в сторону подзапроса (тут вряд ли прокатит)

б) JOIN-ить с выборкой с меньшим количеством записей (выбрать по рейтингу исходя из данных)..

в) условия из WHERE перенести в ON

Я больше к последнему склоняюсь.. =)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#12
Ан нет.. нифига не поможет..

Я был бы предельно удивлён, если это сработало :)

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
lutskboy
На сайте с 22.11.2013
Offline
172
#13

все печально

LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#14
lutskboy:
все печально

Ну ни всё. Если слишком надо, всегда можно костыли сделать :)

S
На сайте с 30.09.2016
Offline
469
#15
LEOnidUKG:
Если слишком надо, всегда можно костыли сделать

Средствами PHP?

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
IL
На сайте с 20.04.2007
Offline
435
#16
LEOnidUKG:
всегда можно костыли сделать

В смысле, изменить архитектуру приложения с учётом текущих потребностей?

Для 20 записей конструкция вполне рабочая.. для 200 - аналогично.. даже для 2000 на шареде может отработать без особых сложностей.

Можно даже без ухода в оптимизацию таблиц закэшировать результат выборки (насколько критично, что рейтинг будет отображаться с задержкой в 5-10 минут?.. или 15 секунд, если кэш пересчитывать при обновлении рейтинга)

Или продублировать поле (вообще отдельную memory-таблицу создать?) + добавить триггер на создание/обновление рейтинга.. если уж совсем "реалтайм" нужен..

LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#17
Sitealert:
Средствами PHP?

А почему бы и нет... скачать ID и рейтинг, отсортировать и потом просто выводить уже в нужном порядке записи по этим ID через WHERE IN(...)

Ничего смертельного в этом не вижу.

Выборка ID будет моментальной.

В любом случаи эту выборку можно кэшировать, хоть в файл на несколько часов или там уже как нужно.

S
На сайте с 30.09.2016
Offline
469
#18
LEOnidUKG:
Ничего смертельного в этом не вижу.

Я вот тоже не понимаю, когда люди упираются в чистые мускульные запросы, вместо того, чтобы разумно сочетать их с обработкой через пхп. На мой взгляд, во многих случаях последнее оптимальнее.

LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#19
Sitealert:
Я вот тоже не понимаю, когда люди упираются в чистые мускульные запросы, вместо того, чтобы разумно сочетать их с обработкой через пхп. На мой взгляд, во многих случаях последнее оптимальнее.

А это потому, что программисты некоторые делают программы для программистов, чтобы кодик был красивый и по феншую. А то, что программы пишутся для конечных пользователей, многие забывают.

---------- Добавлено 17.09.2019 в 14:23 ----------

p.s. ответственно могу заявить, что большинство платных тем для интернет-магазинов для WP или Opencart вообще не тестировались на более 1000 товаров.

Поэтому, то что у ТС такое на 500К это вообще героизм, и это надо решать и явно уже не только силами mysql т.к. даже 1-2 секунды выборки очень много, надо что-то делать и переделывать алгоритм работы.

lutskboy
На сайте с 22.11.2013
Offline
172
#20

продублировал поле rating в первую таблицу. добавил индекс. и все летает несмотря на 500к строк

спасибо за оказание помощи в тестировании ivan-lev

123

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