He estado haciendo el curso MS10775A la semana pasada y surgió una pregunta que el entrenador no pudo responder de manera confiable es:
¿Un reindexar actualiza las estadísticas?
Encontramos discusiones en línea argumentando que sí y que no.
sql-server
index
sql-server-2012
index-tuning
statistics
Thor Erik
fuente
fuente

REINDEXsí actualiza las estadísticas de columna como un efecto secundario de la reconstrucción del índice; no es necesario actualizar las estadísticas. Los datos en la tabla no cambian. Son los mismos datos, solo a) movió su ubicación en la bandeja giratoria (cuando se reorganiza una página), o b) se sentó en una página diferente (en el caso de una reconstrucción). Por lo tanto: una re-índice hace (algunos) las estadísticas de actualización: no hay necesidad de hacerlo.Respuestas:
Puede tener en cuenta lo siguiente al preocuparse por actualizar las estadísticas (copiado de Reconstruir índices frente a Actualizar estadísticas (Benjamin Nevarez)
Por defecto, la
UPDATE STATISTICSdeclaración usa solo una muestra de registros de la tabla. El usoUPDATE STATISTICS WITH FULLSCANescaneará toda la tabla.Por defecto, la
UPDATE STATISTICSdeclaración actualiza las estadísticas de índice y columna. El uso de laCOLUMNSopción actualizará solo las estadísticas de columna. El uso de laINDEXopción actualizará solo las estadísticas de índice.La reconstrucción de un índice , por ejemplo, mediante el uso
ALTER INDEX … REBUILDtambién actualizará las estadísticas del índice con el equivalente de usar aWITH FULLSCANmenos que la tabla esté particionada, en cuyo caso las estadísticas solo se muestrean (se aplica a SQL Server 2012 y versiones posteriores).Las estadísticas que se crearon manualmente usando
CREATE STATISTICSno se actualizan por ningunaALTER INDEX ... REBUILDoperación, incluidaALTER TABLE ... REBUILD.ALTER TABLE ... REBUILDactualiza las estadísticas para el índice agrupado, si se define uno en la tabla que se está reconstruyendo.La reorganización de un índice , por ejemplo, el uso
ALTER INDEX … REORGANIZEno actualiza ninguna estadística.La respuesta breve es que debe usar
UPDATE STATISTICSpara actualizar las estadísticas de columna y que una reconstrucción de índice actualizará solo las estadísticas de índice. Puede forzar una actualización de todas las estadísticas en una tabla, incluidas las estadísticas de índice y las estadísticas creadas manualmente, con laUPDATE STATISTICS (tablename) WITH FULLSCAN;sintaxis.El siguiente código ilustra las reglas encapsuladas anteriormente:
Primero, crearemos una tabla con un par de columnas y un índice agrupado:
Esta consulta muestra la fecha en que cada objeto de estadísticas se actualizó por última vez:
Los resultados muestran que aún no se han realizado actualizaciones, lo cual es correcto desde que acabamos de crear la tabla:
Vamos a reconstruir toda la tabla y ver si eso actualiza las estadísticas:
Los resultados muestran que solo se actualizaron las estadísticas del índice agrupado .
A continuación, realizamos una
UPDATE STATSoperación discreta :Como puede ver, acabamos de actualizar las estadísticas en la
dcolumna:Ahora, actualizaremos las estadísticas de toda la tabla:
Como puede ver, la única forma de asegurarse de que todas las estadísticas se actualicen es actualizar cada una manualmente o actualizar toda la tabla con
UPDATE STATISTICS (table);.fuente
ALTER INDEX ... REBUILDo unaUPDATE STATISTICSdeclaración. Si se reconstruye la tabla, solo se actualizan las estadísticas de índice agrupadas. Para su información, una clave principal y un índice agrupado no son necesariamente compatibles con el mismo objeto de índice.La página de documentos de Microsoft para las estadísticas de SQL Server dice :
fuente