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.
| Elemento | Descripción |
|---|---|
| Por tabla | Número de registros |
| Por columna |
|
- 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.
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.
| 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.