UPDATE STATISTICS (Transact-SQL)

Actualizado: 12 de diciembre de 2006

Actualiza información acerca de la distribución de valores de clave de uno o más grupos de estadísticas (colecciones) de la tabla o la vista indizada especificada. Para crear estadísticas sobre columnas, vea CREATE STATISTICS (Transact-SQL).

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

Sintaxis

UPDATE STATISTICS table | view 
    [ 
        { 
            { index | statistics_name }
          | ( { index |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 | view
    Es el nombre de la tabla o la vista indizada cuyas estadísticas se van a actualizar. Los nombres de las tablas o las vistas deben ajustarse a las reglas de los identificadores. Para obtener más información, vea Usar identificadores como nombres de objeto. Dado que los nombres de los índices no son únicos en cada base de datos, se debe especificar table o view. La especificación del esquema de la base de datos, tabla o vista es opcional.
  • index
    Es el índice cuyas estadísticas se van a actualizar. Los nombres de los índices deben ajustarse a las reglas de los identificadores. Si no se especifica index, se actualizan todas las estadísticas de distribución en la tabla o vista indizada especificada. Esto incluye las estadísticas creadas con la instrucción CREATE STATISTICS, las estadísticas creadas automáticamente y las estadísticas creadas como consecuencia de la creación del índice.

    Para obtener un informe acerca de los índices de un objeto, ejecute sp_helpindex y especifique el nombre de la tabla o la vista.

  • statistics_name
    Es el nombre del grupo de estadísticas (colección) que se va a actualizar. Los nombres de las estadísticas deben ajustarse a las reglas de los identificadores. Para obtener más información acerca de la creación de grupos de estadísticas, vea CREATE STATISTICS (Transact-SQL).
  • FULLSCAN
    Especifica que se deben leer todas las filas de table o view a fin de recopilar las estadísticas. FULLSCAN presenta el mismo comportamiento que SAMPLE 100 PERCENT. FULLSCAN no se puede utilizar con la opción SAMPLE.
  • SAMPLE number { PERCENT | ROWS }
    Especifica el porcentaje de la tabla o la vista indizada, o el número de filas, del que se tomarán muestras cuando se recopilen las estadísticas de tablas o vistas de gran tamaño. number debe ser un entero, ya sea PERCENT o ROWS. Para utilizar el comportamiento de muestreo predeterminado para tablas o vistas de gran tamaño, utilice SAMPLE number con PERCENT o ROWS. El SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) se asegura de que se tomen muestras de un número mínimo de valores para garantizar la utilidad de las estadísticas. Si la opción PERCENT, ROWS o number da como resultado un número demasiado bajo de filas para el muestreo, el Database Engine (Motor de base de datos) corrige automáticamente el muestreo según el número de filas que existe en la tabla o en la vista. Se realiza un muestreo de, al menos, 1.000 páginas de datos aproximadamente. Si la opción PERCENT, ROWS o number crea más valores de los necesarios para un muestreo útil, el Database Engine (Motor de base de datos) intenta ajustarse a la cantidad solicitada. No obstante, puesto que las muestras se toman mediante el recorrido de todas las páginas de datos, el tamaño real de la muestra puede no ser exactamente igual a la cantidad especificada. Cuando se especifica 0 PERCENT o ROWS, el resultado es un conjunto de estadísticas vacío.

    [!NOTA] El comportamiento predeterminado consiste en realizar un recorrido de muestra en la tabla o la vista indizada de destino. Database Engine (Motor de base de datos) calcula automáticamente el tamaño de muestra necesario.

  • RESAMPLE
    Especifica que las estadísticas se recopilarán mediante una frecuencia de muestreo heredada para todas las estadísticas existentes, incluidos los índices. Si la frecuencia de muestreo da lugar al muestreo de muy pocas filas, el Database Engine (Motor de base de datos) corrige automáticamente el muestreo según el número de filas existentes en la tabla o la vista.
  • ALL | COLUMNS | INDEX
    Especifica si la instrucción UPDATE STATISTICS afecta a estadísticas de columnas, de índices o a todas las estadísticas existentes. Si no se especifica ninguna opción, la instrucción UPDATE STATISTICS afecta a todas las estadísticas. Sólo se puede especificar un tipo (ALL, COLUMNS o INDEX) por instrucción UPDATE STATISTICS.
  • NORECOMPUTE
    Especifica que no se vuelvan a calcular automáticamente las estadísticas que estén desfasadas. Las estadísticas quedan desfasadas según el número de operaciones INSERT, UPDATE y DELETE que se realice en las columnas indizadas. Si se especifica, esta opción da lugar a que Database Engine (Motor de base de datos) deshabilite la regeneración automática de estadísticas. Para restaurar la función que vuelve a calcular automáticamente las estadísticas, vuelva a emitir UPDATE STATISTICS sin la opción NORECOMPUTE o ejecute sp_autostats.

    ms187348.note(es-es,SQL.90).gifImportante:
    Si se deshabilita esta función, es posible que el optimizador de consultas no seleccione una estrategia óptima para consultas relacionadas con la tabla especificada.
  • <update_stats_stream_option>
    Identificado para fines informativos solamente. No compatible. La compatibilidad con versiones posteriores no está garantizada.

Notas

El Database Engine (Motor de base de datos) conserva estadísticas acerca de la distribución de los valores de clave de cada índice y las utiliza para determinar qué índices se deben utilizar en el procesamiento de consultas. Los usuarios pueden crear estadísticas de columnas no indizadas mediante la instrucción CREATE STATISTICS. La optimización de consultas depende de la precisión de los pasos de distribución:

  • Si hay un cambio notable en los valores de clave del índice, vuelva a ejecutar UPDATE STATISTICS en ese índice.
  • Si se ha agregado, cambiado o quitado una gran cantidad de datos de una columna indizada (es decir, si ha variado la distribución de los valores de clave) o se ha truncado la tabla mediante la instrucción TRUNCATE TABLE y, a continuación, se ha vuelto a llenar, utilice UPDATE STATISTICS.

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

UPDATE STATISTICS WITH RESAMPLE actualiza todas las estadísticas de una tabla a la velocidad de muestreo actual. Esto significa que las estadísticas vinculadas a índices, creadas mediante recorrido completo al generar el índice, necesitan recorrer toda la tabla para actualizarse. Ésta puede ser una operación en la que se invierte mucho tiempo, especialmente cuando hay grandes tablas con particiones con muchos índices. La actualización de cada estadística exige la lectura de un gran volumen de datos. Para evitar este problema, considere utilizar sp_updatestats (Transact-SQL). Este procedimiento actualiza las estadísticas únicamente cuando es necesario.

Las estadísticas pueden crearse o actualizarse en tablas con columnas calculadas sólo si se dan las condiciones para la creación de un índice en esas columnas. Para obtener más información acerca de los requisitos y las restricciones para la creación de índices en columnas calculadas, vea CREATE INDEX (Transact-SQL).

Si deshabilita la función que vuelve a calcular automáticamente las estadísticas, tendrá que actualizar la información estadística de forma manual.

[!NOTA] La instrucción UPDATE STATISTICS vuelve a habilitar la actualización automática de estadísticas en la tabla o la vista de destino a menos que se especifique la cláusula NORECOMPUTE.

Permisos

Requiere el permiso ALTER en la tabla o la vista.

Ejemplos

A. Actualizar todas las estadísticas de una única tabla

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

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. Actualizar únicamente las estadísticas de un solo índice

En este ejemplo se actualiza únicamente la información de distribución del índice AK_SalesOrderDetail_rowguid de la tabla SalesOrderDetail.

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

C. Actualizar las estadísticas de grupos de estadísticas específicos (colecciones) mediante un muestreo del 50%

En este ejemplo se crea y se actualiza el grupo de estadísticas de las columnas Name y ProductNumber de la tabla Product.

USE AdventureWorks;
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 las estadísticas de grupos de estadísticas específicos (colecciones) mediante FULLSCAN y NORECOMPUTE

En este ejemplo se actualiza el grupo de estadísticas (colección) Products de la tabla Product, se exige un recorrido completo de todas las filas de la tabla Product y se desactiva la actualización automática de estadísticas para el grupo de estadísticas (colección).

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

Vea también

Referencia

ALTER DATABASE (Transact-SQL)
CREATE INDEX (Transact-SQL)
CREATE STATISTICS (Transact-SQL)
sys.stats (Transact-SQL)
sys.stats_columns (Transact-SQL)
Cursores (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
EXECUTE (Transact-SQL)
EVENTDATA (Transact-SQL)
sp_autostats (Transact-SQL)
sp_createstats (Transact-SQL)
sp_helpindex (Transact-SQL)
sp_updatestats (Transact-SQL)
STATS_DATE (Transact-SQL)

Otros recursos

Funciones (motor de base de datos)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

12 de diciembre de 2006

Contenido modificado:
  • Se ha quitado la frase "UPDATE STATISTICS no se permite en una transacción explícita o implícita" de las Notas. Esta restricción no es aplicable a SQL Server 2005.