Структура запроса (оптимизация)

Vadimka

Новичок
Структура запроса (оптимизация)

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

AND (
baner.user_limit = '0' || ( baner.user_limit > (
SELECT count( * )
FROM bn_log.baner_views_seg
WHERE bnrs = baners.id
AND ip = '-737223494' ) )
)
 

Necromant

Новичок
Если есть лог за день, то если найдена хоть одна запись SELECT banner_id FROM banner_today WHERE banner_id=1 AND ip=1215 LIMIT 1

Где ,Primary KEY (banner_id, ip)
 

Vadimka

Новичок
Автор оригинала: Necromant
Если есть лог за день, то если найдена хоть одна запись SELECT banner_id FROM banner_today WHERE banner_id=1 AND ip=1215 LIMIT 1

Где ,Primary KEY (banner_id, ip)
да ключи есть...
но если стоит 3 показа одному айпи, как быть?
 

Falc

Новичок
Vadimka
>>да ключи есть...
>>но если стоит 3 показа одному айпи, как быть?

Тогда такой запрос тормозить не должен. Подсчитывает 3 записи выбранных по индексу MYSQL быстро.
 

Vadimka

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

Falc

Новичок
Vadimka
Тогда тебе и надо оптимизировать тот запрос который тормозит.
Попробуй заменить сабселект на лефт джоин.
 

Vadimka

Новичок
Автор оригинала: Falc
Vadimka
Тогда тебе и надо оптимизировать тот запрос который тормозит.
Попробуй заменить сабселект на лефт джоин.
вот он и тормозит, я об этом и говорю...
с лефт джоином еще медленее :(
так что вопрос остается открытым...
 

Апельсин

Оранжевое создание
> так что вопрос остается открытым...

Ну так вы почти никакой информации не предоставили, что вы хотите?

Как выглядят оба запроса (с подзапросом и с лефт джоином) полностью? что показывает explain? какая структура таблицы? сколько записей?
 

Falc

Новичок
Vadimka
Тебе я объяснил что запрос:
Код:
SELECT count( * )
FROM bn_log.baner_views_seg
WHERE bnrs = baners.id AND ip = '-737223494'
при правельном индексе тормозить не может, значит тормозит не этот запрос, а запрос который тормозит ты даже не привел не говоря уже про остальную информацию на которую тебе указала апельсинка.
 

Vadimka

Новичок
просто при просмотре банера лучше добавить 1 просмотр по условию id & ip , а затем выбирать по условию и с лимитом 1, так будет быстрее чем SELECT count(*)
 
Сверху