2009-06-25 20 views
17

Si tengo una tabla de SQL Server con un índice agrupado en un campo de fecha y hora, establecido en DateTime.Now (desde C#) antes de las inserciones, el índice debe ser ascendente o descendiendo para evitar la reorganización de la mesa?SQL Server: índice agrupado en datetime, ASC o DESC

Gracias.

Respuesta

27

Realmente no importa, pero ¿el DateTime realmente garantiza ser único? EVITARÍA poner un índice agrupado solo en DateTime. Usaría una IDENTIDAD INT o IDENTIDAD BIGINT en su lugar, y colocaría un índice regular no agrupado en DateTime (ya que realmente no se garantiza que sea único ......)

Marc

PS: al igual que una clave principal, el consenso general sobre lo que debe ser una clave agrupada es:

  • única (de lo contrario SQL Server "uniquify" mediante la adición de un grupo 4- byte uniqueifier a él)
  • como estrecha posible
  • estática (nunca cambian)
  • vez aumentar

La columna (s) que componen la clave agrupada (incluido el uniqueifier 4 bytes) se añaden a CADA ENTRADA en CADA índice no agrupado - por lo que desea mantener esos lo más delgado posible.

PS 2: las claves de agrupamiento se agregan a cada índice no agrupado porque esa es la forma en que SQL Server recuperará las filas enteras una vez que se encuentra el valor de búsqueda en el índice no agrupado. Es la "ubicación" de la fila en la base de datos, por así decirlo. Por lo tanto, debe ser único y estrecho.

+0

Entonces, ¿un índice agrupado necesita ser único? – Eyvind

+4

Si es * NOT * único, SQL Server agregará automágicamente un "singularizador" de 4 bytes; si es posible, ¡trate de evitar eso! –

+1

Gracias, no lo sabía. Entonces, dado que la tabla en cuestión tiene un PK que es un identificador único, ¿sería mejor crear el índice agrupado en el campo de fecha y hora Y el PK? – Eyvind

5

Leer este http://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx

Si se lee frecuentemente se basó en el campo de fecha y hora, la buena elección es una clave compuesta de la fecha y la identidad - en ese orden (fecha, la identidad).

+3

No puedo enfatizar cuán útil puede ser tener realmente DateTime como el primer campo en una clave compuesta en clúster. Puede que no coincida con el modelo perfecto de tener siempre una identidad int, pero cuando consulta constantemente, digamos, entradas de registro en la última 1 hora, el problema se presta a tener un DateTime como parte de la clave principal. Especialmente si su campo DateTime es menos del 95% selectivo (lo que significa un montón de valores no únicos) es la forma en que va a llegar al índice y obtener el rendimiento que espera. – AndyClaw

Cuestiones relacionadas