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

Откуда: Москва
Сообщений: 123
Коллеги, подскажите как ведёт себя сервер, если кластерный индекс состоит из 5 полей и мы создаём некластерный индекс из 6 полей, 3 из которых дублируют поля кластерного индекса, если брать за основу утверждение того, что некластерный включает в себя поля кластерного индекса и при этом даёт возможность "дублировать" эти поля в некластерном?
22 апр 13, 09:47    [14211258]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос к экспертам по индексам  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
дублироваться значения ключа кластерного индекса в некластерном не будут, если вы об этом.
22 апр 13, 09:53    [14211284]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос к экспертам по индексам  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Верно ли я понимаю: эти 3 поля не будут дублироваться в некластерном индексе и войдут только в некластерный индекс, но разве тогда не может ли возникнуть ситуация что ключ кластерного индекса будет работать не совсем верно, потому что будет неполный (отсутствуют эти 3 поля)?
Возможно я не совсем понимаю что такое ключ кластерного индекса. В моём понимании - это все те поля, что хранятся в кластерном индексе, именно этим обуславливается увеличение величины некластерного индекса из-за больших кластерных.
22 апр 13, 10:14    [14211372]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос к экспертам по индексам  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> потому что будет неполный (отсутствуют эти 3 поля)?

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

> В моём понимании - это все те поля, что хранятся в кластерном индексе

ну, на листовом уровне там вообще все столбцы таблицы. :)
а ключ - это, собственно, набор столбцов, на котором дерево индекса строится.
22 апр 13, 10:26    [14211435]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос к экспертам по индексам  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
use tempdb
go
if object_id ( 'dbo.t', 'U' ) is not null
drop table dbo.t;
go
create table dbo.t ( a int not null, b int not null, c int not null, d int not null, e int not null);
go
create unique clustered index cl_xxx on dbo.t (a, b, c);
go
create unique nonclustered index ncl_xxx on dbo.t (d, e, a, b, c);
go

declare @i int = 0
while @i < 1000
begin
insert into dbo.t
values( @i,@i,@i,@i,@i );
set @i += 1
end
go 


dbcc ind ( 'tempdb', 'dbo.t', -1 );
go
dbcc traceon (3604);
go
--Кластерный не листовой уровень
dbcc page ( 2, 1, 337, 5 ) with tableresults;
--НеКластерный не листовой уровень
dbcc page ( 2, 1, 339, 5 ) with tableresults;
go


К сообщению приложен файл. Размер - 50Kb
22 апр 13, 10:46    [14211538]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос к экспертам по индексам  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Даже, наверно, так нагляднее:

use tempdb
go
if object_id ( 'dbo.t', 'U' ) is not null
drop table dbo.t;
go
create table dbo.t ( a int not null, b int not null, c int not null, d int not null, e int not null);
go
create unique clustered index cl_xxx on dbo.t (a, b, d);
go
create unique nonclustered index ncl_xxx on dbo.t (c, a, b, e);
go

declare @i int = 0
while @i < 1000
begin
insert into dbo.t
values( @i,@i,@i,@i,@i );
set @i += 1
end
go 


dbcc ind ( 'tempdb', 'dbo.t', -1 );
go
dbcc traceon (3604)
go
--Кластерный не листовой
dbcc page ( 2, 1, 338, 5 ) with tableresults;
--НеКластерный не листовой
dbcc page ( 2, 1, 340, 5 ) with tableresults;
go
--НеКластерный листовой
dbcc page ( 2, 1, 341, 5 ) with tableresults;
go


К сообщению приложен файл. Размер - 58Kb
22 апр 13, 10:55    [14211576]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос к экспертам по индексам  [new]
HoBTID
Member

Откуда:
Сообщений: 929
Knyazev Alexey,
Хороший пример.
Еще показательнее было бы разместить колонки кластерного индекса вперемешку
с новыми колонками не кластерного.
22 апр 13, 10:56    [14211578]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос к экспертам по индексам  [new]
HoBTID
Member

Откуда:
Сообщений: 929
Knyazev Alexey,

Спасибо, вы просто читаете мысли :-))
22 апр 13, 10:57    [14211585]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос к экспертам по индексам  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Даже спросить больше нечего, на столько показательно =)

Спасибо daw и Knyazev Alexey.
22 апр 13, 11:08    [14211640]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить