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

Откуда:
Сообщений: 371
В табличке 4 поля. 3 их них представлены как отдельные индексы и есть один составной. Вот этот составной объединяет поля, которые уже представлены как отдельные индексы. Это нормально или составной там лишний? Просто когда джойню поле по одному из полей этого составного индекса он показывает Index Scan. Может он просто ищет по составному?
26 июл 16, 11:55    [19455941]     Ответить | Цитировать Сообщить модератору
 Re: Про индексы  [new]
Mairos
Member

Откуда:
Сообщений: 555
sanekoffice, поэксперементируйте. )) И тогда точно будете видеть какой из индексов в ком запросе предпочитает оптимизатор
26 июл 16, 11:59    [19455982]     Ответить | Цитировать Сообщить модератору
 Re: Про индексы  [new]
Mairos
Member

Откуда:
Сообщений: 555
create table #tt (i int, j int, c int)
go

insert into #tt (i,j,c) 
select 1,3,5
union all
select 2,7,8
union all
select 3,0,1
union all
select 1,3,5
union all
select 1,3,7
union all
select 4,3,5
union all
select 1,3,5
union all
select 1,6,2
union all
select 1,3,5
union all
select 9,3,0
go

create nonclustered index i_t on #tt(i)
go

create nonclustered index j_t on #tt(j)
go

create nonclustered index c_t on #tt(c)
go

create nonclustered index ijc_t on #tt(i, j,c)
go

set showplan_text on

select t1.i 
from #tt t1
join #tt t2  on t2.i = t1.j

StmtText
  |--Nested Loops(Inner Join, OUTER REFERENCES:([t1].[j]))
       |--Index Scan(OBJECT:([tempdb].[dbo].[#tt] AS [t1]))
       |--Index Seek(OBJECT:([tempdb].[dbo].[#tt] AS [t2]), SEEK:([t2].[i]=[tempdb].[dbo].[#tt].[j] as [t1].[j]) ORDERED FORWARD)


---------------------
select t1.i
from #tt t1
join #tt t2  on t2.i = t1.i

StmtText
  |--Nested Loops(Inner Join, WHERE:([tempdb].[dbo].[#tt].[i] as [t1].[i]=[tempdb].[dbo].[#tt].[i] as [t2].[i]))
       |--Index Scan(OBJECT:([tempdb].[dbo].[#tt] AS [t2]))
       |--Table Scan(OBJECT:([tempdb].[dbo].[#tt] AS [t1]))


Т.е. оптимизатор меняет предпочтения в зависимости от того, что вы выбираете в "select" и что у вас стоит в "on"
26 июл 16, 12:24    [19456153]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить