Mi conocimiento de nivel inferior de SQL (Server 2008) es limitado y ahora está siendo cuestionado por nuestros DBA. Déjame explicarte (he mencionado declaraciones obvias con la esperanza de estar en lo cierto, pero si ves algo mal, dímelo) el escenario:
Tenemos una mesa que contiene 'Órdenes judiciales' para las personas. Cuando creé la tabla, (Nombre: CourtOrder), la creé como:
CREATE TABLE dbo.CourtOrder
(
CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
PersonId INT NOT NULL,
+ around 20 other fields of different types.
)
Luego apliqué un índice no agrupado a la clave principal (para mayor eficiencia). Mi razón es que es un campo único (clave primaria) y debe indexarse, principalmente con fines de selección, como solemosSelect from table where primary key = ...
Luego apliqué un índice CLUSTER en PersonId. El motivo era agrupar los pedidos de una persona en particular físicamente, ya que la gran mayoría del trabajo es recibir pedidos de una persona. Entonces,select from mytable where personId = ...
Me han detenido en esto ahora. Me han dicho que deberíamos poner el índice agrupado en la clave principal y el índice normal en personId. Eso me parece muy extraño. En primer lugar, ¿por qué pondría un índice agrupado en una columna única? ¿Qué es la agrupación? ¿Seguramente eso es un desperdicio del índice agrupado? Habría creído que se usaría un índice normal en una columna única. Además, agrupar el índice significaría que no podemos agrupar una columna diferente (una por tabla, ¿verdad?).
El motivo por el que me han dicho que he cometido un error es que creen que poner un índice agrupado en PersonId haría que las inserciones fueran lentas. Para el aumento del 5% en la velocidad de una selección, obtendríamos una degradación del 95% en la velocidad en inserciones y actualizaciones. ¿Es eso correcto y válido?
Dicen que debido a que agrupamos el personId, SQL Server tiene que reorganizar los datos cada vez que insertamos o hacemos un cambio en el PersonId.
Entonces, he preguntado, ¿por qué SQL tendría el concepto de ÍNDICE CLÚSTER, si es tan lento? ¿Es tan lento como dicen? ¿Cómo debería haber configurado mis índices para lograr un rendimiento óptimo? Pensé que SELECT se usa más que INSERT ... pero dicen que estamos teniendo problemas de bloqueo en INSERTS ...
Espero que alguien pueda ayudarme.