Помогите оптимизировать запрос !!!!!!!!1

MySQL оптимизация запрсы

SET @site_id := 10;
SET @cat_id := 5;
SET @no_ero := 0;
SET @has_ero := 2;

SELECT
`teasers`.`teaser_id`
FROM
`teasers`
INNER JOIN `campaigns` ON
`campaigns`.`campaign_id` = `teasers`.`campaign_id`
INNER JOIN `campaigns_cats` ON
`campaigns_cats`.`campaign_id` = `campaigns`.`campaign_id`
WHERE
`campaigns_cats`.`cat_id` = @cat_id
AND
`campaigns`.`subject_id` NOT IN (
SELECT
`sites_filters4subjects`.`subject_id`
FROM `sites_filters4subjects`
WHERE
`sites_filters4subjects`.`site_id` = @site_id
)
AND
`campaigns`.`campaign_id` NOT IN (
SELECT
`campaign_id`
FROM `campaigns_filters_sites`
WHERE
`site_id` = @site_id
)
AND
`campaigns`.`campaign_id` NOT IN (
SELECT
`ban_sites_campaigns`.`campaign_id`
FROM `ban_sites_campaigns`
WHERE
`ban_sites_campaigns`.`site_id` = @site_id
)
AND
CASE
WHEN @no_ero=1 AND `campaigns`.`ero_campaign`=1
THEN 0
ELSE
1
END
AND
CASE
WHEN @has_ero=1 AND `campaigns`.`no_ero_sites`=1
THEN 0
ELSE
1
END


Примечание:
down
Ответы:
попробуй select'ы внутри заменить на left join.
case тоже убери:
CASE WHEN @no_ero=1 AND `campaigns`.`ero_campaign`=1 THEN 0 ELSE 1 END
эквивалентно
not ( @no_ero=1 AND `campaigns`.`ero_campaign`=1 )


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.