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

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

В БД есть следующая таблица и индексы (СУБД: MSSQL 2008R2):
CREATE TABLE [dwh].[Flat](
	[Federal_Id] [int] NULL,
	[Ter_Region_Id] [int] NULL,
	[Ter_District_Id] [int] NULL,
	[FLOOR_NUM] [int] NULL,
	[FLOOR_QNT] [int] NULL,
	[AREA_ALL] [float] NULL,
	[PRICE] [float] NULL,
	[ROOM_QNT] [nvarchar](16) NULL,
	[HOUSE_TYPE] [nvarchar](64) NULL,
	[OFFER_DEAL] [nvarchar](32) NULL,
	[DEAL_TYPE] [nvarchar](32) NULL
	--... плюс еще 40 подобных полей
	
) ON [PRIMARY]
GO

CREATE CLUSTERED INDEX [ix_terr] 
ON [dwh].[Flat] ([Federal_Id] ASC, [Ter_Region_Id] ASC)
GO

CREATE NONCLUSTERED INDEX [ix_terr_area] 
ON [dwh].[Flat] ([Federal_Id] ASC, [Ter_Region_Id] ASC )
INCLUDE ( [AREA_ALL], [AREA_LIVING], [AREA_KITCHEN])
GO

CREATE NONCLUSTERED INDEX [ix_terr_first_report] 
ON [dwh].[Flat] ([Federal_Id] ASC, [Ter_Region_Id] ASC)
INCLUDE ( [SOURCE_SUPLY], [FLOOR_NUM], [FLOOR_QNT], [AREA_ALL], [PRICE], [ROOM_QNT], [HOUSE_TYPE], [OFFER_DEAL], [DEAL_TYPE])
GO

CREATE NONCLUSTERED INDEX [ix_terr_floor] 
ON [dwh].[Flat] ([Federal_Id] ASC, [Ter_Region_Id] ASC)
INCLUDE ( [FLOOR_NUM], [FLOOR_QNT])
GO


Таблица используется для отчетов SSRS.

При просмотре планов выполнения в SSMS для запроса:
select Federal_Id, Territory_Id
from dwh.SAT_Analogs_Report_Flat
where
	Federal_Id = 100 and Territory_Id = 200
group by Federal_Id, Territory_Id

оптимизатор рекомендует построить следующие индекс:
CREATE NONCLUSTERED INDEX [ix_nc_terr] 
ON [dwh].[SAT_Analogs_Report_Flat] ([Federal_Id],[Territory_Id])
GO
говоря, что "The Query Processor estimates that implementing the following index could improve the query cost by 99.4926%."

А теперь вопросы:
1) с чем связана такая рекомендация оптимизатора, если есть точно такой же кластеризованный индекс?
2) стоит ли вообще держать указанный выше кластеризованный индекс, если учесть, что все запросы к этой таблице содержат условия по полям [Territory_Id] и [Federal_Id]
28 окт 13, 12:30    [15040521]     Ответить | Цитировать Сообщить модератору
 Re: Кластеризованный и некластериованный индексы с одинаковым определением  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
ApXyC
с чем связана такая рекомендация оптимизатора, если есть точно такой же кластеризованный индекс?
Не такой же. Второй столбец отличается.
28 окт 13, 12:39    [15040577]     Ответить | Цитировать Сообщить модератору
 Re: Кластеризованный и некластериованный индексы с одинаковым определением  [new]
Glory
Member

Откуда:
Сообщений: 104760
ApXyC
1) с чем связана такая рекомендация оптимизатора, если есть точно такой же кластеризованный индекс?

CREATE CLUSTERED INDEX   [ix_terr]     ON [dwh].[Flat]                    ([Federal_Id] ASC, [Ter_Region_Id] ASC)
CREATE NONCLUSTERED INDEX [ix_nc_terr] ON [dwh].[SAT_Analogs_Report_Flat] ([Federal_Id],[Territory_Id])

И в каком же месте он "точно такой же" ?
28 окт 13, 12:39    [15040584]     Ответить | Цитировать Сообщить модератору
 Re: Кластеризованный и некластериованный индексы с одинаковым определением  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
ApXyC
если есть точно такой же кластеризованный индекс?

разве? и таблицы разные и поля

CREATE CLUSTERED INDEX [ix_terr]
ON >>>[dwh].[Flat]<<<
([Federal_Id] ASC,
>>>[Ter_Region_Id]<<< ASC)
GO

CREATE NONCLUSTERED INDEX [ix_nc_terr]
ON >>>[dwh].[SAT_Analogs_Report_Flat]<<<
([Federal_Id],
>>>[Territory_Id]<<<)
GO
28 окт 13, 12:41    [15040591]     Ответить | Цитировать Сообщить модератору
 Re: Кластеризованный и некластериованный индексы с одинаковым определением  [new]
ApXyC
Member

Откуда: Пенза
Сообщений: 75
Согласен, не внимательность, извиняюсь.
28 окт 13, 12:51    [15040645]     Ответить | Цитировать Сообщить модератору
 Re: Кластеризованный и некластериованный индексы с одинаковым определением  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
ApXyC
1) с чем связана такая рекомендация оптимизатора, если есть точно такой же кластеризованный индекс?
Если бы были одинаковые столбцы, то тоже было бы выгодно сделать некластерный индекс.
Сочетание Federal_Id и Territory_Id неуникальное, так что поиск по диапазону, а в отдельном некластерном индексе меньше полей в поледнем уровне (то есть только 2 нужных поля), так что придётся читать меньше страниц.
28 окт 13, 13:31    [15040905]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить