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

Откуда:
Сообщений: 56
Привет, помогите пожалуйста избавиться от скана индекса.

вот часть из кода:

FROM dbo.ActiveSessions WITH (NOLOCK) where ([User_Name] in  
(select * from dbo.Split(@User_Name)) or ([User_Name] = isnull (@User_Name,[User_Name])))


в тут приложен к теме.

тоисть в данном случае мне нужен индекс сик, либо что-то менее ресурсоемкое.

Заранее спасибо за помощь

К сообщению приложен файл. Размер - 40Kb
8 сен 14, 23:17    [16552276]     Ответить | Цитировать Сообщить модератору
 Re: Index Scan where "is null"  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
Ckey
вот часть из кода:
Мне кажется, план приложен совсем от другого. ActiveSessions и History...
8 сен 14, 23:30    [16552312]     Ответить | Цитировать Сообщить модератору
 Re: Index Scan where "is null"  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
1. Для dbo.ActiveSessions создать индекс по User_Name
2. Запрос переписать:
FROM dbo.ActiveSessions a
where
 @User_Name is null or
 exists(select * from dbo.Split(@User_Name) where <Столбец из dbo.Split> = a.User_Name)
option
 (recompile);
8 сен 14, 23:54    [16552354]     Ответить | Цитировать Сообщить модератору
 Re: Index Scan where "is null"  [new]
aleks2
Guest
invm
1. Для dbo.ActiveSessions создать индекс по User_Name
2. Запрос переписать:
FROM dbo.ActiveSessions a
where
 @User_Name is null or
 exists(select * from dbo.Split(@User_Name) where <Столбец из dbo.Split> = a.User_Name)
option
 (recompile);

Бред.

declare @un table(User_Name nvarchar(512) primary key clustered);

insert @un select distinct UserName from dbo.Split(@User_Name);

select *
FROM dbo.ActiveSessions a inner join @un un on a.User_Name = un.User_Name 
union all
select * FROM dbo.ActiveSessions  where @User_Name is null


where
@User_Name is null or
exists(select * from dbo.Split(@User_Name) where <Столбец из dbo.Split> = a.User_Name)
9 сен 14, 08:25    [16552644]     Ответить | Цитировать Сообщить модератору
 Re: Index Scan where "is null"  [new]
aleks2
Guest
Ну можно еще функцию dbo.Split() правильно написать - тогда табличная переменная станет ненужной.
9 сен 14, 08:27    [16552648]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить