- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Что лучше? Один большой mysql-запрос с применением нескольких LEFT JOIN или десяток простых запросов?
Пример большого запроса:
Текущее время выполенения ~0.0176 сек.
Hekcfy, ковыряться в большом запарнее, мне кажется...
Хотя, каждому свое, безусловно.
А по производительности - не скажу, так как большими никогда не пользовался :)
ковыряться в большом запарнее, мне кажется..
"ковыряться" в нем не нужно, достаточно один раз написать и радоваться его скорой отработке (к сожалению не в данном случае)
к сожалению не в данном случа
Дык, отключите кэширование и погоняйте запросы по 1к раз.
Мое мнение: одним запросом лучше. Вопрос в том, как так его составить, чтобы не было лишних движений в субд ☝
Я бы наверно поменял
WHERE usr_data_template_news_articul.domain_usrID =1
AND usr_data_template_news_articul.template_usrID =4
AND usr_data_template_news_articul.catalogue_usrID =8
GROUP BY usr_data_template_news_articul.data_template_usrID
на
GROUP BY usr_data_template_news_articul.data_template_usrID
HAVING usr_data_template_news_articul.domain_usrID =1
AND usr_data_template_news_articul.template_usrID =4
AND usr_data_template_news_articul.catalogue_usrID =8
и глянул что получится ;)
Я бы наверно поменял
WHERE usr_data_template_news_articul.domain_usrID =1
AND usr_data_template_news_articul.template_usrID =4
AND usr_data_template_news_articul.catalogue_usrID =8
GROUP BY usr_data_template_news_articul.data_template_usrID
на
GROUP BY usr_data_template_news_articul.data_template_usrID
HAVING usr_data_template_news_articul.domain_usrID =1
AND usr_data_template_news_articul.template_usrID =4
AND usr_data_template_news_articul.catalogue_usrID =8
и глянул что получится ;)
Так увеличение времени получится, т.к. в первом примере сначала фильтруем, потом группируем, что осталось, а во втором - группируем всё, что есть, а потом фильтруем.
Hekcfy, есть ли индексы ко всем группируемым и сравниваемым полям? Если нет, то надо добавить.
Надо добавить только если поля числовые, и вставка в таблицу не очень часто делается
Вообще я думаю вы в состоянии написать explain + тот же запрос и найти слабые места
Hekcfy, есть ли индексы ко всем группируемым и сравниваемым полям? Если нет, то надо добавить.
Да, индексы есть, связь идет по ним. В explain слабые места я не заметил.
Тут дело все в том, что при выводе списков (для навигации) с помощью этого запроса я экономлю порядка 45 запросов, но на главной странице выполняется аж 6 вот таких больших запросов, а остальных страницах - 1 запрос
Текущая структура не позволяет разбить этот запрос на несколько простых, по этому приходится или один сложный, или много простых.
И все же как будет лучше в плане нагрузки на mysql и быстродействия?
с помощью этого запроса я экономлю порядка 45 запросов
Разумеется один запрос лучше 45
но на главной странице выполняется аж 6 вот таких больших запросов, а остальных страницах - 1 запрос
Кэшируйте результаты запроса хотя бы на час (если это навигация, то имхо час кэша не критичен).
И все же как будет лучше в плане нагрузки на mysql и быстродействия?
Вообще в таких случаях надо проверять просто измерениями.
Но ежу понятно что запросы кешируются и поэтому если у вас на всех страницах один и тот же такой запрос, то нагрузка вряд ли будет значительна, если объем выбираемых данных не очень велик
Покажите уже explain. Чай не база ФСБ.
Если в маркетинговых целях хотите уменьшить число запросов , используйте union.
При желании можно сделать 1 запрос на страничку :)
Вообще, стоимость самого запроса для mysql довольно низкая. Разбивая на мелкие запросы , повышаем вероятность кеширования отдельных частей, тогда как большой запрос тут же исчезнет из кеша, как только изменится хотя бы одна из таблиц.
А ещеее большой join, приводит к повышенному времени на оптимизацию запроса, тк mysql перебирает комбинации планов в поисках наилучшей.
Как тут уже сказали, ничего не бывает лучше полноценного нагрузочного тестирования всего стека приложения.