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

Откуда: Мой адрес - Советский Союз
Сообщений: 1670
Хочу сделать индекс на 7 столбцов...

Отговорите кто-нибудь :-)...

В какой-то книге читал, что более 5 индексов на таблицу делать не нужно, замедлятся вставка и удаление...

А вот про максимальное число столбцов нигде не нашел...
27 окт 04, 12:14    [1064228]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Glory
Member

Откуда:
Сообщений: 104760
BOL - Maximum Capacity Specifications
дело не в количестве столбцов а в суммарной их длине
27 окт 04, 12:19    [1064260]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Дурак
Member

Откуда: Мой адрес - Советский Союз
Сообщений: 1670
2 Glory
У меня всего 50 байт получается :-)...

А разве в BOLe где-нибудь написано что делать более 5 индексов на таблицу опасно?

Меня интересуют именно возможные "недокументированные последствия" :-).

Кто-нибудь из присутствующих делал такие индексы?
27 окт 04, 12:25    [1064286]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Glory
Member

Откуда:
Сообщений: 104760
А разве в BOLe где-нибудь написано что делать более 5 индексов на таблицу опасно?
С чего это стало "опасно" ?
Нерационально - может быть. Но это может быть при любом количестве индексов. Если они не будут использоваться.
27 окт 04, 12:28    [1064301]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Дурак
Member

Откуда: Мой адрес - Советский Союз
Сообщений: 1670
Так вот, я спрашиваю про рациональность :-)...

И, кстати...

Glory

дело не в количестве столбцов а в суммарной их длине


А вот это?


Maximum sizes/numbers

Object SQL Server 7.0 SQL Server 2000

Columns per index 16 16
27 окт 04, 12:29    [1064309]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Glory
Member

Откуда:
Сообщений: 104760
Так вот, я спрашиваю про рациональность :-)...
Нет универсального рецепта на все случаи жизни.

А вот это?
Хм. А говорили "А вот про максимальное число столбцов нигде не нашел"
27 окт 04, 12:31    [1064316]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Дурак
Так вот, я спрашиваю про рациональность :-)...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/architec/8_ar_da_0ldf.asp
27 окт 04, 12:33    [1064327]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Дурак
Member

Откуда: Мой адрес - Советский Союз
Сообщений: 1670
Я не нашел про ВЛИЯНИЕ большого количества столбцов, а не про теоретическую возможность создания...

Создавать-то уже попробовал. Перед тем как задать вопрос :-)
Сходу никаких неприятностей не случилось, но перед тем как апдейтить
реальную базу хотел поспрашивать умных людей...
27 окт 04, 12:34    [1064329]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/articles/mssql/03013101Indexes.shtml
27 окт 04, 12:35    [1064334]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Glory
Member

Откуда:
Сообщений: 104760
Дурак
Я не нашел про ВЛИЯНИЕ большого количества столбцов, а не про теоретическую возможность создания...

Про какое влияние вы хотите услышать ?
Вы индекс создаете просто так или потому что возникла необходимость в его создании ? Появиляся запрос, который будет использовать этот индекс ?
Если нет, то зачем вы его создаете ?
27 окт 04, 12:36    [1064342]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Дурак
Member

Откуда: Мой адрес - Советский Союз
Сообщений: 1670
Да.

Есть вот такой запрос
SELECT TDO_Rest.DocID,  '2004-07-09' as DocDate,NamesList.WareName, TDO_Rest.WareCode, TDO_Rest.Price, 0 as PriceRel, coalesce(TDO_Rest.ContragentID,0), coalesce(TDO_Rest.DateIn,0), coalesce(TDO_Rest.Number,0),
TDO_Rest.Amount as Col1,coalesce( TDO_Rest.EnterpriceID,0), TDO_Rest.DateIn2
FROM  TDO_Rest (nolock)
	INNER JOIN NamesList (nolock) ON TDO_Rest.WareCode = NamesList.WareCode
	inner join 
		(
		select WareCode, ObjectID, EnterpriceID, ContragentID, Price, Number, DateIn,  max(DocDate) DocDate from TDO_Rest
		 where  DocDate <= '2004-07-09' and ObjectID = 26
		 group by WareCode, ObjectID, EnterpriceID, ContragentID, Price, Number, DateIn
		) t2
	on TDO_Rest.ObjectID = t2.ObjectID
	and TDO_Rest.DocDate = t2.DocDate 
	and TDO_Rest.WareCode = t2.WareCode
	and TDO_Rest.EnterpriceID = t2.EnterpriceID
	and TDO_Rest.ContragentID = t2.ContragentID
	and TDO_Rest.Price = t2.Price
	and TDO_Rest.Number = t2.Number
	and TDO_Rest.DateIn = t2.DateIn 
WHERE TDO_Rest.Amount > 0 

План выполнения:


|--Compute Scalar(DEFINE:([Expr1009]=If 1 then [TDO_Rest].[ContragentID] else 0, [Expr1010]=If 1 then [TDO_Rest].[DateIn] else 0, [Expr1011]=If 1 then Convert([TDO_Rest].[Number]) else 0, [Expr1012]=If 1 then [TDO_Rest].[EnterpriceID] else 0))
|--Hash Match(Inner Join, HASH:([TDO_Rest].[WareCode])=([NamesList].[WareCode]))
|--Hash Match Root(Inner Join, HASH:([TDO_Rest].[WareCode], [TDO_Rest].[DateIn], [TDO_Rest].[Number], [TDO_Rest].[Price], [TDO_Rest].[ContragentID], [TDO_Rest].[EnterpriceID])=([TDO_Rest].[WareCode], [TDO_Rest].[DateIn], [TDO_Rest].[Number], [T
| |--Table Scan(OBJECT:([Cash26].[dbo].[TDO_Rest]), WHERE:([TDO_Rest].[Amount]>0))
| |--Hash Match Team(Aggregate, HASH:([TDO_Rest].[WareCode], [TDO_Rest].[DateIn], [TDO_Rest].[Number], [TDO_Rest].[Price], [TDO_Rest].[ContragentID], [TDO_Rest].[EnterpriceID]), RESIDUAL(([TDO_Rest].[WareCode]=[TDO_Rest].[WareCode] AND [
| |--Table Scan(OBJECT:([Cash26].[dbo].[TDO_Rest]), WHERE:([TDO_Rest].[DocDate]<=Jul 9 2004 12:00AM AND [TDO_Rest].[ObjectID]=26))
|--Table Scan(OBJECT:([Cash26].[dbo].[NamesList]))

Это план меня напрягает :-)...
27 окт 04, 12:41    [1064358]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Glory
Member

Откуда:
Сообщений: 104760
Это план меня напрягает :-)...
И после создания индекса план улучшился ?
27 окт 04, 12:43    [1064368]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Дурак
Member

Откуда: Мой адрес - Советский Союз
Сообщений: 1670
Да вроде бы...



|--Compute Scalar(DEFINE:([Expr1009]=If 1 then [TDO_Rest].[ContragentID] else 0, [Expr1010]=If 1 then [TDO_Rest].[DateIn] else 0, [Expr1011]=If 1 then Convert([TDO_Rest].[Number]) else 0, [Expr1012]=If 1 then [TDO_Rest].[EnterpriceID] else 0))
|--Parallelism(Gather Streams)
|--Hash Match(Inner Join, HASH:([TDO_Rest].[WareCode])=([NamesList].[WareCode]))
|--Parallelism(Repartition Streams, PARTITION COLUMNS:([TDO_Rest].[WareCode]))
| |--Hash Match Root(Inner Join, HASH:([TDO_Rest].[WareCode], [TDO_Rest].[DateIn], [TDO_Rest].[Number], [TDO_Rest].[Price], [TDO_Rest].[ContragentID], [TDO_Rest].[EnterpriceID])=([TDO_Rest].[WareCode], [TDO_Rest].[DateIn], [TDO_Rest].[N
| |--Parallelism(Repartition Streams, PARTITION COLUMNS:([TDO_Rest].[WareCode], [TDO_Rest].[DateIn], [TDO_Rest].[Number], [TDO_Rest].[Price], [TDO_Rest].[ContragentID], [TDO_Rest].[EnterpriceID]))
| | |--Table Scan(OBJECT:([Cash26].[dbo].[TDO_Rest]), WHERE:([TDO_Rest].[Amount]>0))
| |--Hash Match Team(Aggregate, HASH:([TDO_Rest].[WareCode], [TDO_Rest].[DateIn], [TDO_Rest].[Number], [TDO_Rest].[Price], [TDO_Rest].[ContragentID], [TDO_Rest].[EnterpriceID]), RESIDUAL(([TDO_Rest].[WareCode]=[TDO_Rest].[WareC
| |--Parallelism(Repartition Streams, PARTITION COLUMNS:([TDO_Rest].[WareCode], [TDO_Rest].[DateIn], [TDO_Rest].[Number], [TDO_Rest].[Price], [TDO_Rest].[ContragentID], [TDO_Rest].[EnterpriceID]))
| |--Index Seek(OBJECT:([Cash26].[dbo].[TDO_Rest].[IX_TDO_Rest_2]), SEEK:([TDO_Rest].[DocDate] <= Jul 9 2004 12:00AM), WHERE:([TDO_Rest].[ObjectID]=26) ORDERED)
|--Parallelism(Repartition Streams, PARTITION COLUMNS:([NamesList].[WareCode]))
|--Table Scan(OBJECT:([Cash26].[dbo].[NamesList]))

27 окт 04, 12:46    [1064384]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Дурак
Member

Откуда: Мой адрес - Советский Союз
Сообщений: 1670
Я прошу прощения, вынужден бежать...

Вернусь через 3 часа.

Буду благодарен за любые советы..
27 окт 04, 12:49    [1064396]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Дурак
Member

Откуда: Мой адрес - Советский Союз
Сообщений: 1670
P.S.

На два оставшихся Scan (По NamesList и Objects) обращать внимание не нужно...
На тестовой базе кривые индексы :-)...

В реале там будет все OK
27 окт 04, 12:55    [1064423]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Дурак
Member

Откуда: Мой адрес - Советский Союз
Сообщений: 1670
Up.

Я вернулся...

Никто так ничего и не сказал :-(...
27 окт 04, 16:24    [1065576]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Glory
Member

Откуда:
Сообщений: 104760
Мне лично так и непонятно - в чем собственно проблема-то ?
27 окт 04, 16:35    [1065630]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
Дурак
Member

Откуда: Мой адрес - Советский Союз
Сообщений: 1670
Никаких проблем, всем спасибо!
27 окт 04, 19:17    [1066376]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное число столбцов в индексе  [new]
ChA
Member

Откуда: Москва
Сообщений: 11126
Хотя план, IMHO, все равно отвратительный...
27 окт 04, 19:21    [1066387]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить