Estadísticas de bases de datos

Para que el sistema pueda crear el mejor plan de ejecución para una consulta, evalúa lo que sabe sobre las bases de datos a las que accede. Sin estadísticas actualizadas, el sistema utiliza valores predeterminados e internos que son independientes de la tabla en sí que dan como resultado consultas poco óptimas con tiempos de ejecución largos.

En la siguiente tabla se describe la información sobre las estadísticas.
Tabla 1. Información de base de datos
Elemento Descripción
Por tabla Número de registros
Por columna
  • Valor mínimo
  • Valor máximo
  • Recuentos nulos (por columna)
  • Número de valores distintos (también denominado dispersión)
El sistema utiliza estadísticas con muchos fines:
  • En función del número de registros, el número de valores distintos para una columna y suponiendo una distribución uniforme entre los valores mínimo y máximo, el optimizador estima el número de filas pertinentes y determina cuál es la tabla más pequeña de las dos tablas de unión.
  • En función de los valores máximo y mínimo, el optimizador determina el tipo de funciones matemáticas que es necesario realizar (por ejemplo, 64 bits o 128 bits).
  • Si existen valores nulos en las tablas de bases de datos, durante la generación de código el sistema debe generar más código para probar y comprobar si existen valores nulos en los campos. Código extra significa ciclos de CPU extras durante el tiempo de ejecución.

El mandato GENERATE STATISTICS recopila esta información. Si tiene el privilegio GenStats, puede ejecutar este mandato en una base de datos, una tabla o columnas individuales. De forma predeterminada, el usuario administrativo puede ejecutar el mandato en cualquier base de datos (para procesar todas las tablas en la base de datos) o cualquier tabla individual.

El usuario administrativo puede asignar este privilegio a otros usuarios. Por ejemplo, para otorgar al user1 el privilegio de ejecutar GENERATE STATISTICS en una o en todas las tablas de la base de datos DEV, el usuario administrativo debe otorgar al user1 el privilegio LIST en las tablas de la base de datos del sistema y GENSTATS en la base de datos dev, como en estos mandatos SQL de ejemplo:
SYSTEM(ADMIN)=> GRANT LIST ON TABLE TO user1;
DEV(ADMIN)=> GRANT GENSTATS ON TABLE TO user1;

Para obtener más información sobre el privilegio GenStats, consulte la Tabla 1.

En la siguiente tabla se describe la sintaxis del mandato nzsql para estos casos.

Tabla 2. Generar sintaxis de estadísticas
Descripción Sintaxis
Una base de datos (todas las tablas) GENERATE STATISTICS;
Una tabla específica (todas las columnas) GENERATE STATISTICS ON nombre_tabla;
Columnas individuales en una tabla GENERATE STATISTICS ON mi_tabla(nombre, dirección, zip);

El mandato GENERATE STATISTICS lee todas las filas de todas las tablas para determinar los valores de dispersión (sin muestras). Proporciona las estadísticas más precisa y con más calidad.