- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть запрос показывающий 5 лучших фирм
С двумя LEFT JOIN время выполнения ~1.5 сек.
AS average, items.comments, CONCAT('/firm/', sections.id, '-', sections.alias, '/', categories.id, '-', categories.alias, '/', items.id, '-', items.alias)
AS url FROM cl6s3_firm_items AS items
LEFT JOIN cl6s3_firm_categories AS categories ON items.category_id = categories.id
LEFT JOIN cl6s3_firm_sections AS sections ON items.section_id = sections.id
WHERE items.section_id IN(5,9,31)
GROUP BY items.name
ORDER BY items.average DESC LIMIT 5
если заменить на INNER то время чуть улучшается до 1,3 сек (результат тот же), но все равно долго...
AS average, items.comments, CONCAT('/firm/', sections.id, '-', sections.alias, '/', categories.id, '-', categories.alias, '/', items.id, '-', items.alias)
AS url FROM cl6s3_firm_items AS items
INNER JOIN cl6s3_firm_categories AS categories ON items.category_id = categories.id
INNER JOIN cl6s3_firm_sections AS sections ON items.section_id = sections.id
WHERE items.section_id IN(5,9,31)
GROUP BY items.name
ORDER BY items.average DESC LIMIT 5
EXPLAIN запросов прилагаю.
1. - INNER
2. - LEFT
Смысл есть только в лефт-джоин, чисто логически, так что оптимизируйте его.
У вас на один "айтем" может быть несколько категорий и/или секций?
Если нет, уберите group by в принципе.
Если да (что странно, т.к. вы просто берете случайного представителя из секций и категорий для одного имени айтема), то попробуйте убрать group by и использовать distinct(items.name)
В любом случае, если допустимо, в групповых функциях используйте items.id , а не items.name
Попробуйте повесить индекс на items.average в чистом виде или же на совместный на section_id, average
Какой размер выборки без лимита получается?
уберите group by в принципе.
Спасибо!!! Это позволило сократить время запроса до 0.0084 (проверял с SQL_NO_CACHE)
Dram, если есть GROUP BY не по PRIMARY KEY, то у вас будет temporary с вероятностью в 146%, а если есть ORDER BY не по ключу с JOIN, то будет и filesort. Ну это так, на будущее :)
С двумя LEFT JOIN время выполнения ~1.5 сек.
если заменить на INNER то время чуть улучшается до 1,3 сек (результат тот же), но все равно долго...
Это понятно
Потому что размер кортежа разный, а вы еще сортируете
ORDER BY items.average
Но у вас нет агрегатных функций
GROUP BY items.name
не нужно (уже сказано)
странно что нет DISTINCT :)