Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите оптимизировать простой запрос  [new]
NickVA
Member

Откуда:
Сообщений: 55
SELECT distinct poll_id
FROM jos_poll_date
WHERE poll_id not in
(SELECT distinct poll_id FROM jos_poll_date WHERE ip = 'Мой_IP')

Вложенный запрос выполняется моментально
Основной - секунд 5-10

индексы есть и для ip и для poll_id

explain прикрепил

К сообщению приложен файл. Размер - 22Kb
11 июн 14, 14:49    [16154916]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
NickVA,

SELECT distinct poll_id FROM jos_poll_date WHERE ip = 'Мой_IP' AND poll_id IS NULL
Что-нибудь возвращает?
Ну, хотя бы для какого-нибудь ip ??

Забыл сказать, что DISTINCT в подзапросах IN и EXISTS не имеет никакого смысла и выглядит глупо.
11 июн 14, 14:53    [16154957]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
джойн просто напишите и всех делов
11 июн 14, 14:55    [16154975]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
А почему нельзя по-простому
SELECT DISTINCT poll_id FROM jos_poll_date WHERE ip <> 'Мой_IP';
??
11 июн 14, 14:58    [16155029]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
И схему у таблицы надо бы дописать
11 июн 14, 14:59    [16155042]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
NickVA
Member

Откуда:
Сообщений: 55
да результат есть, просто долго выполняется запрос
а с join как сделать?
11 июн 14, 14:59    [16155048]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
NickVA
Member

Откуда:
Сообщений: 55
iap,
потому что это не тот результат, который мне нужен
11 июн 14, 15:01    [16155069]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
как это не тот результат, у вас же одна таблица или вы нам тут неправильный свой запрос привели
SELECT distinct poll_id 
FROM jos_poll_date  
WHERE poll_id not in
   (SELECT distinct poll_id FROM jos_poll_date WHERE ip = 'Мой_IP')
11 июн 14, 15:04    [16155093]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
NickVA
iap,
потому что это не тот результат, который мне нужен
Так может быть poll_id IS NULL или нет?
Я бы в любом случае на NOT EXISTS переписал.
11 июн 14, 15:06    [16155113]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
NickVA
Member

Откуда:
Сообщений: 55
если в таблице jos_poll_date такие строки
id pol_id ip
1 33 1.1.1.1.
2 33 мой_ip

то мой запрос вернет ничего
а ваш строчку
11 июн 14, 15:07    [16155117]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Konst_One
как это не тот результат, у вас же одна таблица или вы нам тут неправильный свой запрос привели
SELECT distinct poll_id 
FROM jos_poll_date  
WHERE poll_id not in
   (SELECT distinct poll_id FROM jos_poll_date WHERE ip = 'Мой_IP')
Я так понял, что для ip = 'Мой_IP' может быть такой же poll_id, как и для какого-нибудь ip <> 'Мой_IP'.
Тогда такой poll_id не нужен.
11 июн 14, 15:08    [16155131]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
NickVA
Member

Откуда:
Сообщений: 55
если not exists то так?
SELECT distinct poll_id 
FROM jos_poll_date p1
WHERE not exists (SELECT 1 FROM jos_poll_date p2 WHERE ip = '80.237.74.3' and p1.poll_id = p2.poll_id)

также 5-10 сек
11 июн 14, 15:11    [16155150]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
NickVA
если not exists то так?
SELECT distinct poll_id 
FROM jos_poll_date p1
WHERE not exists (SELECT 1 FROM jos_poll_date p2 WHERE ip = '80.237.74.3' and p1.poll_id = p2.poll_id)


также 5-10 сек
Зато это логически надёжно.
В отличие от NOT IN
11 июн 14, 15:13    [16155161]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
NickVA
Member

Откуда:
Сообщений: 55
хотя нет, вру, уже 1-3 секунды, в принципе быстрее не получится.
спасибо
11 июн 14, 15:13    [16155168]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
Почему, можно и быстрее, зависит от объема данных. Такой запрос может прекрасно использовать секционирование по IP.
Это первое. Второе - сравнение строк не продуктивно, храните IP в виде integer.
11 июн 14, 15:39    [16155454]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать простой запрос  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Владислав Колосов
Такой запрос может прекрасно использовать секционирование
Ага, старый "добрый" миф про секционирование.
13 июн 14, 01:45    [16160352]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить