CREATE STATISTICS (Transact-SQL)
Crea un histograma y grupos de densidad asociados (colecciones) sobre la columna o el conjunto de columnas proporcionados de una tabla o una vista indizada. También se crean estadísticas de resumen de cadena sobre las estadísticas generadas en las columnas con datos de tipo char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), text y ntext. El optimizador de consultas utiliza esta información estadística para elegir el plan más eficaz para recuperar o actualizar datos. Las estadísticas actualizadas permiten al optimizador analizar con precisión el costo de los distintos planes de consulta y elegir un plan de buena calidad. Para obtener más información acerca de las estadísticas en SQL Server 2005, vea el tema acerca de las estadísticas usadas por el optimizador de consultas en Microsoft SQL Server 2005 en Microsoft TechNet.
Convenciones de sintaxis de Transact-SQL
Sintaxis
CREATE STATISTICS statistics_name
ON { table | view } ( column [ ,...n ] )
[ WITH
[ [ FULLSCAN
| SAMPLE number { PERCENT | ROWS }
| STATS_STREAM = stats_stream ] [ , ] ]
[ NORECOMPUTE ]
] ;
Argumentos
- statistics_name
Es el nombre del grupo de estadísticas que se va a crear. Los nombres de las estadísticas deben cumplir las reglas de los identificadores y deben ser exclusivos en la tabla o la vista en la que se crean.
- table
Es el nombre de la tabla en que se van a crear las estadísticas con nombre. Los nombres de las tablas deben cumplir las reglas de los identificadores. table es la tabla con la que se asocia column. La especificación del nombre del propietario de la tabla es opcional. Es posible crear estadísticas sobre tablas de otra base de datos si se especifica un nombre de tabla completo.
- view
Es el nombre de la vista en la que se van a crear las estadísticas con nombre. Una vista debe tener un índice agrupado para que se puedan crear estadísticas sobre ella. Los nombres de las vistas deben cumplir las reglas de los identificadores. view es la vista con la que se asocia column. La especificación del nombre del propietario de la vista es opcional. Es posible crear estadísticas sobre vistas de otra base de datos si se especifica un nombre de vista completo.
column
Es la columna o el conjunto de columnas sobre el que se van a crear las estadísticas. Cualquier columna que se pueda especificar como clave de índice también se puede especificar para las estadísticas, con las siguientes excepciones:- No es posible especificar columnas xml.
- El tamaño máximo permitido de los valores de la columna combinados puede sobrepasar el límite de 900 bytes impuesto sobre el valor de clave de índice.
Sólo se pueden especificar columnas calculadas si las opciones de base de datos ARITHABORT y QUOTED_IDENTIFIER están establecidas en ON. Se pueden especificar columnas de tipo definido por el usuario CLR si el tipo admite el orden binario. Es posible especificar columnas calculadas definidas como llamadas de métodos fuera de una columna de un tipo definido por el usuario si los métodos están marcados como deterministas. Para obtener más información acerca de la creación de columnas de tipo definido por el usuario CLR, vea Trabajar con tipos definidos por el usuario para CLR.
- FULLSCAN
Especifica que se deben leer todas las filas de table o view a fin de recopilar las estadísticas. La especificación de FULLSCAN proporciona el mismo comportamiento que SAMPLE 100 PERCENT. Esta opción no se puede utilizar con la opción SAMPLE.
SAMPLE number { PERCENT | ROWS }
Especifica que un porcentaje, o un número especificado de filas, de los datos debe leerse mediante muestreo aleatorio para recopilar las estadísticas. number. Si se especifica PERCENT, number debe estar entre 0 y 100; si se especifica ROWS, number puede estar entre 0 y el total de filas n.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 las páginas de datos completas, 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.
SAMPLE no se puede utilizar con la opción FULLSCAN. Si no se especifica la opción SAMPLE o FULLSCAN, el Database Engine (Motor de base de datos) calcula automáticamente una muestra.
NORECOMPUTE
Especifica que el Database Engine (Motor de base de datos) no debe volver a calcular automáticamente las estadísticas. Si se especifica esta opción, el Database Engine (Motor de base de datos) continúa utilizando las estadísticas creadas anteriormente (antiguas), aunque cambien los datos. El Database Engine (Motor de base de datos) no actualiza ni mantiene automáticamente las estadísticas. Esto podría dar lugar a planes no óptimos.Advertencia: Se recomienda hacer un uso limitado de esta opción y sólo por parte de un administrador del sistema experimentado.
- STATS_STREAM **=**stats_stream
Esta sintaxis sólo es de uso interno y no se admite. Microsoft se reserva el derecho a cambiar esta sintaxis en cualquier momento.
Notas
Sólo el propietario de la tabla puede crear estadísticas sobre esa tabla. El propietario de una tabla puede crear un grupo de estadísticas (colección) en cualquier momento, tanto si hay datos en la tabla como si no.
Si la opción de base de datos AUTO_UPDATE_STATISTICS está establecida en ON (el valor predeterminado) y no se ha especificado la cláusula NORECOMPUTE, el Database Engine (Motor de base de datos) actualizará automáticamente las estadísticas creadas de forma manual.
CREATE STATISTICS se puede ejecutar en una vista indizada. El optimizador utiliza las estadísticas sobre vistas indizadas sólo si se hace referencia directa a la vista en la consulta y se especifica la sugerencia NOEXPAND para la vista. De lo contrario, las estadísticas se derivan de las tablas subyacentes antes de sustituir la vista indizada en el plan de consulta. Esta sustitución solamente se admite en Microsoft SQL Server 2005 Enterprise y Developer.
Permisos
Requiere el permiso ALTER en la tabla o la vista.
Ejemplos
A. Utilizar CREATE STATISTICS con SAMPLE number PERCENT
En el siguiente ejemplo se crea el grupo de estadísticas (colección) ContactMail1
. Éste calcula estadísticas de muestreo aleatorio sobre el cinco por ciento de las columnas ContactID
y EmailAddress
de la tabla Contact
de la base de datos AdventureWorks
.
USE AdventureWorks;
GO
CREATE STATISTICS ContactMail1
ON Person.Contact (ContactID, EmailAddress)
WITH SAMPLE 5 PERCENT;
B. Utilizar CREATE STATISTICS con FULLSCAN y NORECOMPUTE
En el siguiente ejemplo se crea el grupo de estadísticas (colección) ContactMail2
. Éste calcula estadísticas de todas las filas de las columnas ContactID
y EmailAddress
de la tabla Contact
y deshabilita la repetición automática del cálculo de estadísticas.
CREATE STATISTICS NamePurchase
ON AdventureWorks.Person.Contact (ContactID, EmailAddress)
WITH FULLSCAN, NORECOMPUTE;
Vea también
Referencia
ALTER DATABASE (Transact-SQL)
CREATE INDEX (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
sys.stats (Transact-SQL)
sys.stats_columns (Transact-SQL)
sp_autostats (Transact-SQL)
sp_createstats (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)
EVENTDATA (Transact-SQL)