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

Откуда:
Сообщений: 1
В книге Язык SQL- Учебный Курс - Л.Шкарина, Питер. 2002
написано- стр.584

Используйте индексы тогда, когда это действительно необходимо. Для обеспечения целостности данных в столбце можно определить ограничение целостности unique или primary key, а не прибегать к созданию уникальных индексов. Задание уникальных индексов только для обеспечения целостности данных является неоправданной тратой пространства в базе данных.
(конец цитаты).

С другой стороны в MSDN указано явно:
Each PRIMARY KEY and UNIQUE constraint generates an index....

Indexes created as part of a constraint are dropped when the constraint is dropped.
(end of quote)

кто прав? думаю, что MSDN :-)

А вообще зря,что это не реализовано, для небольших таблиц (100 строчек), индекс все равно не используется (используется table scan). Получается, что мы должны создать и использовать ненужную конструкцию.

Как это сделано в других базах данных (Oracle)- т.е. разделены ли индексы и constraints?
Алексей
17 фев 03, 19:36    [130728]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать констрент без индекса?  [new]
Sergey Vinogradov
Member

Откуда: Novokuznetsk
Сообщений: 74
Теоретики, блин. :)

Из ничего проблему высосали и народ мутят.
Для больших таблиц задолбаешься ждать, пока он каждый констрейн проверит без индексов.
А для маленьких замечание про "трату пространства в базе данных" вообще неуместно.

Я бы выразился по-другому: задание уникальных индексов только для обеспечения целостности данных является применением серверного механизма не по назначению.
Ведь PK и UNIQUE - это логические конструкции SQL, а индекс - физическая конструкция SQL-сервера. А использовать физическую особенность сервера для обеспечения логики (да еще при наличии адекватной логической конструкции) по крайней мере некорректно.
У индексов же назначение только одно - ускорение поиска данных.

>А вообще зря,что это не реализовано, для небольших таблиц (100 строчек), индекс все равно не используется (используется table scan).

Где написано, что для проверки PK и UNIQUE используется table scan?

>Получается, что мы должны создать и использовать ненужную конструкцию.

Не мы, а сервер. И это его внутренние проблемы, что он там создает и использует. Главное, чтобы работал быстро.
18 фев 03, 05:57    [130794]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать констрент без индекса?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Как это сделано в других базах данных (Oracle)- т.е. разделены ли индексы и constraints

Эт что, в Oracle значит можно бросить уникальный столбец без индекса в таблице с предпологаемым числом строк 100 млн.?
Уж лючше пусть будет индекс, чем сидеть по ...цать часов ждать, пока он такую таблицу отсканирует.
18 фев 03, 07:02    [130801]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить