UPDATE STATISTICS (Transact-SQL)

Actualiza las estadísticas de optimización de consulta para una tabla o vista indizada. De forma predeterminada, el optimizador de consultas ya actualiza las estadísticas como requisito para mejorar el plan de consulta; en algunos casos puede mejorar el rendimiento de las consultas utilizando UPDATE STATISTICS o el procedimiento almacenado sp_updatestats para actualizar las estadísticas con más frecuencia que la de las actualizaciones predeterminadas.

La actualización de las estadísticas asegura que las consultas se compilan con estadísticas actualizadas. Sin embargo, la actualización de las estadísticas hace que las consultas se vuelvan a compilar. Se recomienda no actualizar las estadísticas con demasiada frecuencia, porque hay que elegir el punto válido entre la mejora de los planes de consulta y el tiempo empleado en volver a compilar las consultas. Los inconvenientes específicos dependen de su aplicación. UPDATE STATISTICS puede usar tempdb para ordenar el ejemplo de filas con fines de compilación de estadísticas.

Para obtener más información sobre estadísticas, incluido cuándo se va a usar UPDATE STATISTICS, vea Utilizar las estadísticas para mejorar el rendimiento de las consultas.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

UPDATE STATISTICS table_or_indexed_view_name 
    [ 
        { 
            { index_or_statistics__name }
          | ( { index_or_statistics_name } [ ,...n ] ) 
                }
    ] 
    [    WITH 
        [ 
            [ FULLSCAN ] 
            | SAMPLE number { PERCENT | ROWS } ] 
            | RESAMPLE 
            | <update_stats_stream_option> [ ,...n ]
        ] 
        [ [ , ] [ ALL | COLUMNS | INDEX ] 
        [ [ , ] NORECOMPUTE ] 
    ] ;

<update_stats_stream_option> ::=
    [ STATS_STREAM = stats_stream ]
    [ ROWCOUNT = numeric_constant ]
    [ PAGECOUNT = numeric contant ]

Argumentos

  • table_or_indexed_view_name
    Es el nombre de la tabla o la vista indizada cuyas estadísticas se van a actualizar.

  • index_or_statistics_name
    Es el nombre del índice cuyas estadísticas se van a actualizar o el nombre de las estadísticas que actualizar. Si no se especifica index_or_statistics_name, el optimizador de consultas actualiza todas las estadísticas para la tabla o la vista indizada. Esto incluye las estadísticas creadas usando la instrucción CREATE STATISTICS en las columnas, las estadísticas de columna única creadas cuando se usa AUTO_CREATE_STATISTICS y las estadísticas creadas para los índices.

    Para obtener más información acerca de AUTO_CREATE_STATISTICS, vea Opciones de ALTER DATABASE SET (Transact-SQL). Para ver todos los índices para una tabla o vista, puede usar sp_helpindex.

  • FULLSCAN
    Para calcular las estadísticas, examine todas las filas de la tabla o la vista indizada. FULLSCAN y SAMPLE 100 PERCENT tienen los mismos resultados. FULLSCAN no se puede usar con la opción SAMPLE.

  • SAMPLE number { PERCENT | ROWS }
    Especifique el porcentaje aproximado o número de filas de la tabla o vista indizada que el optimizador de consultas usará al actualizar las estadísticas. En PERCENT, number puede tener un valor comprendido entre 0 y 100, mientras que en ROWS number puede tener un valor comprendido entre 0 y el número total de filas. El porcentaje o número de filas real de los ejemplos del optimizador de consultas podría no coincidir con el porcentaje o el número especificado. Por ejemplo, el optimizador de consultas examina todas las filas en una página de datos.

    SAMPLE es útil para los casos especiales en los que el plan de consulta, basado en el muestreo predeterminado, no es óptimo. En la mayoría de las situaciones, no es necesario especificar SAMPLE porque el optimizador de consultas usa el muestreo y determina el tamaño de muestra estadísticamente significativo de forma predeterminada, tal y como se exige para crear planes de consulta de alta calidad.

    SAMPLE no se puede usar con la opción FULLSCAN. Cuando no se especifica SAMPLE ni FULLSCAN, el optimizador de consultas usa los datos muestreados y calcula el tamaño de la muestra de forma predeterminada.

    Recomendamos no especificar 0 PERCENT ni 0 ROWS. Cuando se especifican 0 PERCENT o ROWS, el objeto de estadísticas se actualiza pero no contiene datos de estadísticas.

  • RESAMPLE
    Se actualiza cada estadística utilizando su velocidad de muestra más reciente.

    El uso de RESAMPLE puede producir un recorrido de tabla completo. Por ejemplo, las estadísticas de los índices utilizan un recorrido de tabla completo como su velocidad de muestra. Cuando no se especifica ninguna de las opciones de muestreo (SAMPLE, FULLSCAN ni RESAMPLE), el optimizador de consultas muestrea los datos y calcula el tamaño de la muestra de forma predeterminada.

  • ALL | COLUMNS | INDEX
    Actualice todas las estadísticas existentes, las estadísticas creadas en una o más columnas, o las estadísticas creadas para los índices. Si no se especifica ninguna de las opciones, la instrucción UPDATE STATISTICS actualiza todas las estadísticas en la tabla o vista indizada.

  • NORECOMPUTE
    Deshabilite la opción automática de actualización de las estadísticas, AUTO_UPDATE_STATISTICS, para las estadísticas especificadas. Si se especifica esta opción, el optimizador de consultas completa esta actualización de estadísticas y deshabilita las actualizaciones futuras.

    Para rehabilitar el comportamiento de la opción AUTO_UPDATE_STATISTICS, ejecute de nuevo UPDATE STATISTICS sin la opción NORECOMPUTE o ejecute sp_autostats.

    Nota de advertenciaAdvertencia

    Utilizar esta opción puede producir planes de consulta poco óptimos. Se recomienda usar esta opción con moderación y que lo haga únicamente un administrador de sistemas cualificado.

    Para obtener más información acerca de la opción AUTO_STATISTICS_UPDATE, vea Opciones de ALTER DATABASE SET (Transact-SQL). Para obtener más información acerca de cómo deshabilitar y volver a habilitar las actualizaciones de estadísticas, vea Utilizar las estadísticas para mejorar el rendimiento de las consultas.

  • <update_stats_stream_option>
    Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

Comentarios

Cuándo usar UPDATE STATISTICS

Para obtener más información acerca de cuándo usar UPDATE STATISTICS, vea Utilizar las estadísticas para mejorar el rendimiento de las consultas.

Actualizar todas las estadísticas con sp_updatestats

Para obtener información sobre cómo actualizar estadísticas para todas las tablas internas y definidas por el usuario de la base de datos, vea el procedimiento almacenado sp_updatestats (Transact-SQL). Por ejemplo, el comando siguiente llama a sp_updatestats para actualizar todas las estadísticas de la base de datos.

EXEC sp_updatestats

Determinar la actualización de estadísticas más reciente

Para determinar cuándo se actualizaron las estadísticas por última vez, use la función STATS_DATE.

Permisos

Requiere el permiso ALTER en la tabla o la vista.

Ejemplos

A. Actualizar todas las estadísticas en una tabla

En este ejemplo se actualizan las estadísticas de todos los índices de la tabla SalesOrderDetail.

USE AdventureWorks2008R2;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. Actualizar las estadísticas para un índice

En este ejemplo se actualizan las estadísticas del índice AK_SalesOrderDetail_rowguid de la tabla SalesOrderDetail.

USE AdventureWorks2008R2;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO

C. Actualizar las estadísticas con un muestreo del 50%

En este ejemplo se crean y, después, se actualizan las estadísticas de las columnas Name y ProductNumber de la tabla Product.

USE AdventureWorks2008R2;
GO
CREATE STATISTICS Products
    ON Production.Product ([Name], ProductNumber)
    WITH SAMPLE 50 PERCENT
-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS Production.Product(Products) 
    WITH SAMPLE 50 PERCENT;

D. Actualizar estadísticas utilizando FULLSCAN y NORECOMPUTE

En este ejemplo se actualizan las estadísticas de Products de la tabla Product, se exige un examen completo de todas las filas de la tabla Product y se desactivan las estadísticas automáticas para las estadísticas de Products.

USE AdventureWorks2008R2;
GO
UPDATE STATISTICS Production.Product(Products)
    WITH FULLSCAN, NORECOMPUTE;
GO