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

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

То есть в идеале в Microsoft SQL Server есть инструмент, встроенный в Visual Studio 2010 Professional (ПРИМЕЧАНИЕ. У меня нет предпринимательства или конечных вариантов - это делает большую разницу в том, что я могу сделать со встроенным менеджером 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.

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

Рекомендации:

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

http://en.wikipedia.org/wiki/Index_%28database%29

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

@mrdenny - я благодарю вас за потраченное время и вижу, что у вас звездная репутация, но я не могу поверить в то, что вы говорите - да, я упрям ​​и называю это отрицанием!:-) Я оставлю эту тему открытой чуть больше в надежде, что кто-то еще увидит ее. Кроме того, поскольку я не запускаю SQL изначально, только Linq-to-entity из 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)

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

Другие вопросы по тегам