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

Откуда: Киев
Сообщений: 98
Добрый день!

Собственно, я уже описал свой вопрос в этом топике, но, к сожалению, завтыкал и выбрал не тот раздел и поэтому создаю этот пост в разделе СУБД MS SQL Server.

====

По сабжу, на данный момент, остановился на варианте перезаписи запросов вида:

select name from Table where age = 25 OR 33;


на запрос вида:

select name from Table where age = 25 union select name from Table where age = 33;


В таком случае MS SQL Server всегда выполняет Clustered Index Seek, вместо Clustered Index Scan.

Может кто-то еще посоветует какие варианты?
13 май 14, 18:59    [16011960]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для звпросов с использованием оператора OR  [new]
iap
Member

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

UNION или UNION ALL?
Вот в чём вопрос!
13 май 14, 20:31    [16012403]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для звпросов с использованием оператора OR  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
roman_lenko,

чем IN не подошел?
13 май 14, 21:04    [16012474]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для звпросов с использованием оператора OR  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
roman_lenko
Может кто-то еще посоветует какие варианты?
Можно создать два фильтрованных индекса. Но этот вариант конечно применим только в случае если различных значений небольшое количество, к тому же условия в запросе обязательно должны быть заданы константами.

Вряд ли тут можно сделать что-то еще с индексами чтобы решить эту проблему.
14 май 14, 00:11    [16013126]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для звпросов с использованием оператора OR  [new]
Crimean
Member

Откуда:
Сообщений: 13147
если аналогия с OR то UNION конечно :) потому как
where id = 1 or id = 1 vs select 1 union [all?] select 1
ну а по теме - я такие in() списки иногда чуть ли не через UDF материализую как таблички
и план, что логично, исправляется, скажем, в merge )
14 май 14, 10:12    [16013944]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для звпросов с использованием оператора OR  [new]
OR != UNION
Guest
Crimean
если аналогия с OR то UNION конечно :) потому как
where id = 1 or id = 1 vs select 1 union [all?] select 1
ну а по теме - я такие in() списки иногда чуть ли не через UDF материализую как таблички
и план, что логично, исправляется, скажем, в merge )

ой ли

create table #t (x int)
insert #t(x)
select 1
union all
select 1

select *
from #t 
where x = 1 or x =1

select *
from #t 
where x = 1 
union
select *
from #t 
where x = 1 


drop table #t
14 май 14, 10:17    [16013974]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для звпросов с использованием оператора OR  [new]
Crimean
Member

Откуда:
Сообщений: 13147
OR != UNION,

передергиваем же ) мы говорим про "строки" или про "значения", ага?
впрочем, +1 пример к обсуждению
14 май 14, 11:09    [16014121]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для звпросов с использованием оператора OR  [new]
roman_lenko
Member

Откуда: Киев
Сообщений: 98
Люди, всем спасибо за варианты и советы.

Я поэксперементировал и пока решил остановиться на варианте с заменой OR на UNION — тогда часть поиска выполняется в Clustered Index Seek, а часть — Merge и это более-менее пока меня устраивает.
14 май 14, 12:28    [16014720]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для звпросов с использованием оператора OR  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
roman_lenko
Люди, всем спасибо за варианты и советы.

Я поэксперементировал и пока решил остановиться на варианте с заменой OR на UNION — тогда часть поиска выполняется в Clustered Index Seek, а часть — Merge и это более-менее пока меня устраивает.
Но повторяющиеся записи умрут!
А может, они Вам все были нужны?!
14 май 14, 12:30    [16014736]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить