Я был бы признателен за помощь в том, как создавать некластеризованные индексы в базе данных SQL Server 2008 без использования кода - или, скорее, «статически» раз и навсегда до выполнения любых SQL-запросов (что, вероятно, не имеет смысла, но моя точка зрения поскольку я не хочу запускать команду SQL для создания индексов каждый раз, когда я запускаю свои SQL-запросы, которые являются частью моего бизнес-приложения).
То есть в идеале в Microsoft SQL Server есть инструмент, встроенный в Visual Studio 2010 Professional (ПРИМЕЧАНИЕ: У меня НЕТ ПРЕДПРИНИМАТЕЛЬСКИХ ИЛИ ULTIMATE EDITION - ЭТО ДЕЛАЕТ БОЛЬШУЮ РАЗНИЦУ В ОТНОШЕНИИ, ЧТО Я МОГУ ДЕЛАТЬ СО ВСТРОЕННЫМ МЕНЕДЖЕРОМ SQL В ПРОФЕССИОНАЛЬНОМ ВЕРСИЯ), чтобы сделать это - поскольку у меня нет другого инструмента (я только что посмотрел и обнаружил, что в 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#Non-clustered
----- Обновлено
@mrdenny - Я благодарю вас за ваше время, и я вижу, что у вас звездная репутация, но я не могу поверить в то, что вы говорите - да, я упрямый и называю это отрицанием! :-) Я оставлю эту тему открытой еще немного в надежде, что кто-нибудь ее увидит. Кроме того, поскольку я не запускаю SQL изначально, а только Linq-to-entity из Entity Framework (EF 4.0), я бы даже не знал, где разместить код, который вы любезно предоставили («T / SQL для создания некластеризованного индекса на два десятичных столбца "). Я всегда использую оба десятичных столбца в моем поиске WHERE, поэтому ваша первая команда SQL мне подходит.
Может ли кто-нибудь перевести первый SQL-код мистера Денни в Linq-to-Entities? В противном случае я подниму руки и скажу, что не верю в это (противоречит тому, что я читал о том, что индексирование похоже на сбалансированное дерево видов, которое должно быть автоматически встроено в систему) или, в качестве альтернативы, я Я прочитал между строк, что индексация сэкономит вам примерно на 20% лучшую производительность - хорошо, но не о чем волноваться. Да это кислый виноград!
Первые некластеризованные индексы - не новость в 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)
В любом случае вам нужно будет добавить те столбцы, которые вы возвращаете, в список включенных столбцов, чтобы минимизировать генерируемый ввод-вывод.