Дублирующие индексы

TMN

Добрый день.Имеется таблица:
CREATE TABLE [dbo].[TestTable] (
	[a] [int] NULL ,
	[b] [int] NULL ,
	[c] [int] NULL ,
	[d] [int] NULL ,
	[id] [int] IDENTITY (<b>1</b>, <b>1</b>) NOT NULL 
) ON [PRIMARY]
GO
Выборки происходят с ограничением как по колонкам a, b, так и по a, b, c.Стоит ли создавать оба индекса:
CREATE INDEX [IX_TestTable] ON [dbo].[TestTable]([a], [b]) ON [PRIMARY]
GO

 CREATE INDEX [IX_TestTable_1] ON [dbo].[TestTable]([a], [b], [c]) ON [PRIMARY]
GO
Или оставить только один IX_TestTable_1?
9 ответов

TMN

сортировка/группировка?


TMN

+ селективность столбца с?


TMN

все равно в индексе хранятся все строки, поэтому оставить только 1..для спящего время бодрствования равносильно сну


TMN

CREATE INDEX [IX_TestTable_1] ON [dbo].[TestTable]([a], [b], [c]) ON [PRIMARY]
Для поля b индекс будет использоваться, если только он же будет использоваться и для a.А для с - только если он будет задействован и для a, и для b.Как-то вот так вот.


TMN

Алексей2003,не все так просто. Если есть сортировка-группировка по A,B,C - индес по A,B не поможет, нужен большой. А если этого нет, а селективность по столбцу С низкая - большой индекс бессмысленнен, будет только место лишнее занимать.


TMN

Запросы будут типа:where a=1 and b=2where a=1 and b=2 and c=3


TMN

В моем случае эти столбцы - внешние ключи, так что сортировки точно не будет, а вот группировка возможна как по всем трем полям, так и по одному/паре в любой последовательности.Селективность всех полей соответственно высокая.


TMN

Запросы будут типа:where a=1 and b=2where a=1 and b=2 and c=3
Тогда если индекс по с вообще целесообразен, то все три поля включайте


TMN

Алексей2003,не все так просто. Если есть сортировка-группировка по A,B,C - индес по A,B не поможет, нужен большой. А если этого нет, а селективность по столбцу С низкая - большой индекс бессмысленнен, будет только место лишнее занимать.
ну если еще тут приплюсовать, что будут ли лукапы и т.д., нюансов много.в любом случае 2 индекса - излишек..