2010-03-12 13 views
13

Si me quedo Profiler, entonces se sugiere una gran cantidad de índices como éste¿La clave principal es automáticamente un índice?

CREATE CLUSTERED INDEX [_dta_index_Users_c_9_292912115__K1] ON [dbo].[Users] 
(
[UserId] ASC 
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, 
ONLINE = OFF) ON [PRIMARY] 

identificación de usuario es la clave principal de la tabla de usuarios. Es este índice mejor que el que ya está en la tabla:

ALTER TABLE [dbo].[Users] ADD CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED 
(
[UserId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, 
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 

Respuesta

6

Cada tabla necesita un índice agrupado y una clave principal. De forma predeterminada, el PK está agrupado, pero puede no estar agrupado si desea que lo haya hecho.

Ha especificado una PK no agrupado por lo que el perfilador sugiere un índice agrupado ...

Nota: una tabla sin un índice agrupado se llama un "montón" porque es un montón de datos no estructurados ...

+4

Los datos en una tabla no indexada están sin duda estructurados – Charlie

+0

"Todas las tablas necesitan un índice agrupado" "Nota: una tabla sin un índice agrupado ...." Usted se ha contradicho allí, ¿qué quiso decir? Y en cuanto a cada tabla que necesita una clave principal, en mi experiencia, SQL Server le permitirá crear una tabla sin una, como lo hará la mayoría de los DBMS. – Stewart

1

Es mejor porque está agrupado.

+0

está agrupado por defecto, pero no tiene que ser –

+0

PK desde la publicación está explícitamente no agrupado. – wRAR

2

Esencialmente, sugiere que debe hacer que la clave principal sea un índice agrupado en lugar de uno no agrupado. En la mayoría de los casos, esto sería algo bueno de hacer.

21

Sí, una clave principal es siempre un índice.

Si no tiene ningún otro índice agrupado sobre la mesa, entonces es fácil: un índice agrupado hace que la tabla sea más rápida, para cada operación. ¡SÍ! Lo hace. Vea el excelente The Clustered Index Debate continues de Kim Tripp para obtener información general.

De modo que, en realidad, cada tabla útil (excepto quizás las tablas de etapas para la carga masiva u otros casos raros) debe tener un índice agrupado. Si no tiene uno, es bastante obvio que el DTA lo recomendaría y lo colocará en la (s) columna (s) de clave principal de forma predeterminada.

+3

"... hace una tabla más rápida, para cada operación" que no sea inserte? ¿No tiene más trabajo por hacer para insertar, ya que también tiene que actualizar el índice? –

+2

¡NO! Lea la publicación de blog de Kim Tripp: "Las inserciones ** son más rápidas en una tabla agrupada ** (pero solo en la tabla agrupada" correcta ") que en comparación con una pila. El problema principal aquí es que las búsquedas en el IAM/PFS a determinar la ubicación de inserción en un montón son más lentos que en una tabla agrupada (donde se conoce la ubicación de inserción, definida por la clave agrupada). " –

Cuestiones relacionadas