2009-12-16 7 views
9

Me gustaría crear un índice en una vista que tengo, pero necesito asegurarme de que los datos puedan leerse mientras se crea el índice. Estaba leyendo un article que sugiere que cuando se crea un índice no agrupado que los datos están siendo legible si se especifica la opción LÍNEA = ON (ejemplo abajo):¿La creación de un índice no agrupado en una tabla de SQL Server 2005 evita las selecciones?

CREATE UNIQUE CLUSTERED INDEX CLUST_IDX_SQLTIPS 
ON SQLTips (tip) with (ONLINE=ON) 

Estoy entendiendo esto correctamente? ¿Hay algún problema potencial que deba tener en cuenta antes de crear índices en una vista que deba ser legible mientras creo mi índice?

Respuesta

14

La creación y reconstrucción de índices en línea solo están disponibles en Enterprise Edition. Ver How Online Index Operations Work y Guidelines for Performing Online Index Operations.

hay algunas restricciones, las más notables son:

  • índice agrupado debe crearse/reconstruida en línea si contienen campos BLOB (imagen, ntext, text, varchar (max), nvarchar (max) , varbinary (max) y xml).
  • índice clúster intitial en una vista debe crearse fuera de línea.

Debe asegurarse de su base de datos tiene suficiente espacio para llevar a cabo la operación de índice en línea, ya que requiere de aproximadamente 1,5 veces el tamaño de la tabla en Además al tamaño actual. Durante la creación del índice en línea, la tabla existe dos veces en la base de datos, de ahí el espacio adicional necesario.

Dado que su caso se encuentra en la categoría excluida (índice agrupado inicial en una vista), entonces no necesita preocuparse por los índices en línea. Debe usar una operación de índice sin conexión.

BTW también debe tener en cuenta que el optimizador solo considera las vistas indizadas en Enterprise Edition. En las ediciones más bajas, se debe especificar la cláusula NOEXPAND en la vista para aprovechar un posible índice en la vista.

+0

Gracias, no me di cuenta. Planeo crear dos índices en esta vista, el grupo inicial que mencionaste y un grupo no agrupado después de eso. ¿Sabe usted de todos modos mantener legibles los datos en mi opinión mientras creo el clúster inicial? BTW Estoy ejecutando edición empresarial. –

+0

La vista de índice agrupado bloqueará las filas en la tabla, bloqueando así las lecturas de las filas bloqueadas (bajo el nivel de serialización predeterminado). ¿Qué tan grande es la mesa? ¿Estamos hablando de unos segundos o algunas horas de tiempo de creación del índice? Puede considerar habilitar la captura de lectura confirmada, esto permitirá que los SELECT no se vean afectados. Pero esto tiene un impacto global en el sistema, especialmente en tempdb, por lo que debes probarlo de antemano. –

+0

La tabla tiene más de 9 millones de registros. Estoy pensando que los índices tardarían unos 15 minutos en crearse. Si la gente no puede leer durante 15 minutos, entonces tendría un problema. ¿Podría ser más específico sobre el impacto que la habilitación de lectura comprometida tendría en el sistema? ¿Cómo recomendarías probar antes de mano? –

2

Hay más información en los artículos msdn sobre CREATE INDEX y online index operations que tiene mucha información al respecto.

No debería haber problemas con esto, si solo está haciendo SELECT y ACTUALIZACIONES. No estoy tan seguro de las copias de seguridad, tal vez sea mejor probarlas en un sistema de prueba y ver?

Cuestiones relacionadas