Как создать некластеризованные индексы в базе данных SQL Server 2008? Желательно без кода?

Как создать некластеризованные индексы в базе данных SQL Server 2008? Желательно без кода?

Я был бы признателен за помощь в создании некластеризованных индексов в базе данных SQL Server 2008 без использования кода — или, скорее, «статически» раз и навсегда, до выполнения любых SQL-запросов (это, возможно, не имеет смысла, но я хочу сказать, что я не хочу запускать команду SQL для создания индексов каждый раз, когда я запускаю SQL-запросы, являющиеся частью моего бизнес-приложения).

То есть, в идеале в Microsoft SQL Server должен быть инструмент, встроенный в Visual Studio 2010 Professional (ПРИМЕЧАНИЕ: У МЕНЯ НЕТ ВЕРСИЙ ENTERPRISE ИЛИ ULTIMATE — ЭТО ВАЖНО ДЛЯ ТОГО, ЧТО Я МОГУ ДЕЛАТЬ С ПОМОЩЬЮ ВСТРОЕННОГО МЕНЕДЖЕРА SQL В ВЕРСИИ PROFESSIONAL), чтобы сделать это — поскольку у меня нет других инструментов (я просто посмотрел и обнаружил, что в Microsoft SQL Server 2008 нет того, что мне нужно — по крайней мере, в моей системе — по-видимому, это урезанная бесплатная версия). Так что, возможно, простая команда SQL для индексации приведенной ниже таблицы оправдана.

Я прочитал приведенные ниже ссылки, но не могу понять, как это сделать.

Вот моя таблица:

Table CUSTOMER
Columns:

CustomerID = GUID - this is a unique primary key

CustomerDecimal1 = decimal- this is not unique, but 99% of the time it is unique   
compared to the rest of decimal fields.  I wish to index this field 1 of 2

CustomerDecimal2 = decimal- this is not unique, but 99% of the time it is unique
 compared to the rest of decimal fields. I wish to index this field 2 of 2

CustomerTextComments = vChar(50)

Десятичные поля часто используются в предложениях WHERE, поэтому они являются идеальными кандидатами для некластеризованного индекса, который, по-видимому, является новой функцией, поддерживаемой в Microsoft SQL Server 2008.

Далее о моей платформе: у меня уже есть таблица с существующими данными, но только несколько записей, в основном пустых. Я работаю из Server Explorer из Visual Studio 2010, который имеет много функций, включая возможность генерировать SQL-запросы. В идеале я хотел бы написать любой метод индексации в Linq-to-entities (только потому, что я не очень хорошо знаю SQL), но если кто-то может дать мне полный список того, как индексировать поля CustomerDecimal1, CustomerDecimal2 в этой таблице, я был бы благодарен.

Использованная литература:

http://blog.sqlauthority.com/2008/09/01/sql-server-2008-introduction-to-filtered-index-improve-performance-with-filtered-index/ (Новое свойство индекса «filtered» в SQL Server 2008 для поиска в предложении WHERE)

http://en.wikipedia.org/wiki/Index_%28database%29#Некластеризованный

-----Обновлено

@mrdenny -- Я благодарю вас за ваше время, и я вижу, что у вас безупречная репутация, но я не могу поверить в то, что вы говорите -- да, я упрям ​​и называю это отрицанием! :-) Я оставлю эту ветку открытой еще немного в надежде, что кто-то еще ее увидит. Кроме того, поскольку я не запускаю SQL изначально, а только Linq-to-сущности изнутри Entity Framework (EF 4.0), я даже не знаю, куда поместить код, который вы любезно предоставили ("T/SQL для создания некластеризованного индекса по двум десятичным столбцам"). Я всегда использую оба десятичных столбца в своем поиске WHERE -- поэтому ваша первая команда SQL мне подходит.

Может ли кто-нибудь перевести первый SQL-код мистера Денни в Linq-to-Entities? Если это не получится, я разведу руками и скажу, что не верю (это противоречит тому, что я читал о том, что индексация — это своего рода сбалансированное дерево, которое должно автоматически встраиваться в систему), или, в качестве альтернативы, я прочитал между строк, что индексация сэкономит вам максимум около 20% производительности — хорошо, но не так уж и сильно заморачиваться. Да, это кислый виноград!

решение1

Первые некластеризованные индексы не являются новинкой в ​​SQL Server 2008. Они существуют уже давно. Фильтрованные индексы являются новинкой в ​​SQL Server 2008.

Невозможно заставить систему определить, какие индексы необходимо создать до выполнения каких-либо запросов к SQL Server.

Существует два способа создания индексов в SQL Server. Один из них — с помощью T/SQL, а другой — с помощью SQL Server Management Studio, в котором есть графический редактор. Графический редактор просто сгенерирует T/SQL и запустит T/SQL в базе данных.

Код T/SQL для создания некластеризованного индекса по двум десятичным столбцам будет выглядеть примерно так, как показано ниже.

CREATE INDEX IX_CustomerDecimal1_CustomerDecimal2 on dbo.CUSTOMER
(CustomerDecimal1, CustomerDecimal2)
INCLUDE (CustomerTextComments)
WITH (FILLFACTOR=70)

Нет, если вы планируете использовать два поля CustomerDecimal независимо при поиске в таблице базы данных, то вам понадобится отдельный индекс для каждого из них.

CREATE INDEX IX_CustomerDecimal1 on dbo.CUSTOMER
(CustomerDecimal1)
INCLUDE (CustomerTextComments)
WITH (FILLFACTOR=70)

CREATE INDEX IX_CustomerDecimal2 on dbo.CUSTOMER
(CustomerDecimal2)
INCLUDE (CustomerTextComments)
WITH (FILLFACTOR=70)

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

Связанный контент