Como criar índices não clusterizados em um banco de dados SQL Server 2008? De preferência sem código?

Como criar índices não clusterizados em um banco de dados SQL Server 2008? De preferência sem código?

Eu gostaria de receber ajuda sobre como criar índices não clusterizados em um banco de dados SQL Server 2008 sem usar código - ou melhor, 'estaticamente' de uma vez por todas antes de executar qualquer consulta SQL (isso provavelmente não faz sentido, mas meu ponto sendo que não quero executar o comando SQL para criar índices toda vez que executo minhas consultas SQL que fazem parte do meu aplicativo de negócios).

Ou seja, o ideal é que haja uma ferramenta dentro do Microsoft SQL Server integrada ao Visual Studio 2010 Professional (NOTA: NÃO TENHO EDIÇÕES ENTERPRISE OU ULTIMATE - ISSO FAZ UMA GRANDE DIFERENÇA NO QUE POSSO FAZER COM O SQL MANAGER INTEGRADO NO PROFISSIONAL VERSION) para fazer isso - já que não tenho nenhuma outra ferramenta (apenas olhei e descobri que o Microsoft SQL Server 2008 não tem o que eu preciso - pelo menos no meu sistema - é aparentemente uma versão freeware danificada ). Portanto, talvez seja necessário um simples comando SQL para indexar a tabela abaixo.

Eu li as referências abaixo, mas não consigo descobrir como fazer isso.

Aqui está minha mesa:

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)

Os campos decimais são frequentemente usados ​​em cláusulas WHERE, portanto são candidatos ideais para um índice não clusterizado, que aparentemente é um novo recurso suportado no Microsoft SQL Server 2008.

Mais sobre minha plataforma: já tenho uma tabela com dados existentes, mas apenas alguns registros, a maioria em branco. Estou trabalhando no Server Explorer de dentro do Visual Studio 2010, que possui muitas funcionalidades, incluindo a capacidade de gerar consultas SQL. Idealmente, eu gostaria de escrever qualquer método de indexação em Linq-to-entities (apenas porque não conheço SQL muito bem), mas se alguém puder me fornecer uma lista completa sobre como indexar os campos CustomerDecimal1, CustomerDecimal2 nesta tabela eu ficaria grato.

Referências:

http://blog.sqlauthority.com/2008/09/01/sql-server-2008-introduction-to-filtered-index-improve-performance-with-filtered-index/ (Nova propriedade de índice 'filtrada' do SQL Server 2008 para pesquisas de cláusula WHERE)

http://en.wikipedia.org/wiki/Index_%28database%29#Non-clustered

-----Atualizada

@mrdenny - agradeço pelo seu tempo e vejo que você tem uma reputação estelar, mas não posso acreditar no que você está dizendo - sim, sou teimoso e chamo isso de negação! :-) Vou deixar este tópico um pouco mais aberto na esperança de que alguém o veja. Além disso, como eu não executo SQL nativamente, apenas Linq-to-entities de dentro do Entity Framework (EF 4.0), eu nem saberia onde colocar o código que você forneceu ("T/SQL para criar um índice não clusterizado em as duas colunas decimais"). Estou usando ambas as colunas decimais o tempo todo em minha pesquisa WHERE - portanto, seu primeiro comando SQL é apropriado para mim.

Alguém pode traduzir o primeiro código SQL do Sr. Denny em Linq-to-Entities? Caso contrário, levantarei as mãos e direi que não acredito (vai contra o que li sobre a indexação ser como uma espécie de árvore balanceada, que deveria ser automaticamente incorporada ao sistema) ou, em alternativa, eu Li nas entrelinhas que a indexação economizará no máximo cerca de 20% melhor desempenho - bom, mas nada para realmente se preocupar. Sim, são uvas verdes!

Responder1

Os primeiros índices não clusterizados não são novos no SQL Server 2008. Eles existem desde sempre. Os índices filtrados são novos no SQL Server 2008.

Não há como o sistema descobrir quais índices precisam ser criados antes que qualquer consulta seja executada no SQL Server.

Existem duas maneiras de criar índices no SQL Server. Um é com T/SQL e o outro é usando SQL Server Management Studio que possui um editor gráfico. O editor gráfico simplesmente gerará T/SQL e executará o T/SQL no banco de dados.

O T/SQL para criar um índice não clusterizado nas duas colunas decimais seria semelhante ao mostrado abaixo.

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

Não, se você planeja usar os dois campos CustomerDecimal independentemente ao pesquisar a tabela do banco de dados, precisará de um índice separado para cada um.

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)

Em ambos os casos, você precisará adicionar todas as colunas que estiver retornando à lista de colunas incluídas para minimizar o IO que está sendo gerado.

informação relacionada