¿Cómo crear índices no agrupados en una base de datos SQL Server 2008? ¿Preferiblemente sin código?

¿Cómo crear índices no agrupados en una base de datos SQL Server 2008? ¿Preferiblemente sin código?

Agradecería ayuda sobre cómo crear índices no agrupados en una base de datos SQL Server 2008 sin usar código, o mejor dicho, 'estáticamente' de una vez por todas antes de ejecutar cualquier consulta SQL (eso probablemente no tenga sentido, pero mi punto ya que no quiero ejecutar el comando SQL para crear índices cada vez que ejecuto mis consultas SQL que son parte de mi aplicación comercial).

Es decir, lo ideal es que haya una herramienta dentro de Microsoft SQL Server integrada en Visual Studio 2010 Professional (NOTA: NO TENGO EDICIONES ENTERPRISE O ULTIMATE; ESTO HACE UNA GRAN DIFERENCIA EN CUANTO A LO QUE PUEDO HACER CON EL ADMINISTRADOR DE SQL INTEGRADO EN PROFESSIONAL VERSIÓN) para hacer esto, ya que no tengo ninguna otra herramienta (solo miré y descubrí que Microsoft SQL Server 2008 no tiene lo que necesito, al menos en mi sistema; aparentemente es una versión gratuita defectuosa). ). Entonces, tal vez esté justificado un simple comando SQL para indexar la siguiente tabla.

He leído las referencias a continuación, pero no sé cómo hacerlo.

Aquí está mi 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)

Los campos decimales se utilizan con frecuencia en las cláusulas WHERE, por lo que son candidatos ideales para un índice no agrupado, que aparentemente es una nueva característica compatible con Microsoft SQL Server 2008.

Más información sobre mi plataforma: ya tengo una tabla con datos existentes, pero solo unos pocos registros, en su mayoría en blanco. Estoy trabajando desde Server Explorer desde Visual Studio 2010, que tiene muchas funciones, incluida la capacidad de generar consultas SQL. Idealmente, me gustaría escribir cualquier método de indexación en Linq-to-entities (solo porque no conozco muy bien SQL), pero si alguien puede darme una lista completa sobre cómo indexar los campos CustomerDecimal1, CustomerDecimal2 en esta tabla, agradecería.

Referencias:

http://blog.sqlauthority.com/2008/09/01/sql-server-2008-introduction-to-filtered-index-improve-rendimiento-con-filtered-index/ (Nueva propiedad de índice 'filtrada' de SQL Server 2008 para búsquedas de cláusulas WHERE)

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

-----Actualizado

@mrdenny: te agradezco tu tiempo y veo que tienes una reputación estelar, pero no puedo creer lo que dices. Sí, soy testarudo y lo llamo negación. :-) Dejaré este hilo abierto un poco más con la esperanza de que alguien más lo vea. Además, como no ejecuto SQL de forma nativa, solo Linq-to-entities desde Entity Framework (EF 4.0), ni siquiera sabría dónde colocar el código que me proporcionó ("T/SQL para crear un índice no agrupado en las dos columnas decimales"). Utilizo ambas columnas decimales en todo momento en mi búsqueda WHERE, por lo que su primer comando SQL es apropiado para mí.

¿Alguien puede traducir el primer código SQL del Sr. Denny a Linq-to-Entities? De lo contrario, levantaré las manos y diré que no lo creo (va en contra de lo que leí acerca de que la indexación es como una especie de árbol equilibrado, que debería integrarse automáticamente en el sistema) o, como alternativa, He leído entre líneas que la indexación le permitirá ahorrar como máximo un 20% más de rendimiento; está bien, pero no es nada por lo que preocuparse demasiado. ¡Sí, son uvas agrias!

Respuesta1

Los primeros índices no agrupados no son nuevos en SQL Server 2008. Han existido desde siempre. Los índices filtrados son nuevos en SQL Server 2008.

No hay forma de que el sistema determine qué índices deben crearse antes de ejecutar cualquier consulta en SQL Server.

Hay dos formas de crear índices en SQL Server. Uno es con T/SQL y el otro utiliza SQL Server Management Studio, que tiene un editor gráfico. El editor gráfico simplemente generará T/SQL y ejecutará T/SQL en la base de datos.

El T/SQL para crear un índice no agrupado en las dos columnas decimales se vería como se muestra a continuación.

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

No, si planea utilizar los dos campos CustomerDecimal de forma independiente al buscar en la tabla de la base de datos, necesitará un índice separado para cada uno.

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)

En cualquier caso, deberá agregar las columnas que devuelva a la lista de columnas incluidas para minimizar la IO que se genera.

información relacionada