En el subapartado llamado "Ejemplo de impacto en predicados de igualdad", existe una discusión sobre un predicado C <= 10. El error se encuentra en -86%. Esta información no es correcta. La frase del final del párrafo debe ser:
Suponiendo una distribución uniforme de los datos y la utilización de la fórmula (1), el número de filas que satisface el predicado se estima que es 1, un error del -87,5%.
En la subsección llamada "Ejemplo del impacto en predicados de igualdad", existe una discusión sobre un predicado C > 8,5 AND C <= 10. La estimación del valor r_2 utilizando interpolación lineal debe cambiarse por la siguiente:
10 - 8,5 r_2 *= ---------- x (número de filas con el valor > 8,5 y <= 100,0) 100 - 8,5 10 - 8,5 r_2 *= ---------- x (10 - 7) 100 - 8,5 1,5 r_2 *= ---- x (3) 91,5 r_2 *= 0
El párrafo que sigue a este ejemplo nuevo también debe modificarse y quedar del modo siguiente:
La estimación final es r_1 + r_2 *= 7, y el error es únicamente del -12,5%.
Dentro de la sección titulada "Normas para actualizar estadísticas de columna", el último elemento de la lista de puntos del primer elemento de la lista debe sustituirse por lo siguiente:
HIGH2KEY debe ser mayor que LOWKEY siempre que haya más de 3 valores diferenciados en la columna correspondiente. En el caso de que haya 3 o menos valores distintos en la columna, HIGH2KEY puede ser igual a LOW2KEY.
En FixPak 1, se proporciona una opción para recopilar y utilizar estadísticas de los subelementos. Se trata de estadísticas sobre el contenido de los datos de las columnas cuando los datos tienen una estructura en forma de una serie de subcampos o subelementos delimitados por espacios en blanco.
Por ejemplo, imagine que una base de datos contiene una tabla DOCUMENTOS en la que cada fila describe un documento e imagine que en DOCUMENTOS hay una columna llamada PALABRAS CLAVE que contiene una lista de las palabras clave relevantes relacionadas con este documento con el propósito de recuperar el texto. Los valores de PALABRAS CLAVE podrían ser los siguientes:
'base_de_datos simulación analítica negocios inteligencia' 'simulación modelo mosca_de_la_fruta reproducción temperatura' 'forestación picea suelo erosión precipitaciones' 'bosque temperatura suelo precipitación incendios'
En este ejemplo, el valor de cada columna está formado por 5 subelementos, cada uno de los cuales es una palabra (la palabra clave), separada de las otras por un espacio en blanco.
Para consultas que especifiquen predicados LIKE en estas columnas utilizando el carácter % coincidir_todo:
SELECT .... FROM DOCUMENTS WHERE KEYWORDS LIKE '%simulación%'
es a menudo beneficioso que el optimizador conozca estadísticas básicas sobre la estructura de subelementos de la columna, como por ejemplo:
En el ejemplo de la columna PALABRAS_CLAVE, SUB_COUNT es 5 y SUB_DELIM_LENGTH es 1, porque cada delimitador es un solo carácter en blanco.
En FixPak 1, el administrador del sistema controla la recopilación y la utilización de estas estadísticas mediante una extensión a la variable del registro DB2_LIKE_VARCHAR. La variable de registro afecta al modo en que el optimizador de DB2 UDB trata a un predicado del tipo:
COLUMN LIKE '%xxxxxx'
donde xxxxxx es cualquier serie de caracteres; es decir, cualquier predicado LIKE cuyo valor de búsqueda empiece por un carácter %. (Puede que terminen con un carácter % o que no lo hagan). A éstos nos referimos como "predicados LIKE comodín". Para todos los predicados, el optimizador tiene que estimar cuántas filas coinciden con el predicado. Para predicados LIKE comodín, el optimizador asume que la COLUMNA donde se buscan coincidencias tiene la estructura de una serie de elementos concatenados juntos para formar la totalidad de la columna, y estima la longitud de cada elemento en base a la longitud de la serie, excluyendo los caracteres inciales y de cola %. La nueva sintaxis es:
db2set DB2_LIKE_VARCHAR=[Y|N|S|num1][,Y|N|num2] donde - el primer término (anterior a la coma) significa lo siguiente, pero sólo para las columnas que no tienen estadísticas de subelementos positivas S Uso del algoritmo tal como se usa en DB2 versión 2. N Uso de un algoritmo de subelementos de longitud fija. Y (valor omisión) Uso de un algoritmo de subelementos de longitud variable con un valor por omisión para el parámetro del algoritmo. num1 Uso de un algoritmo de subelementos de longitud variable y utilización de num1 como el parámetro del algoritmo. - el segundo término (posterior a la coma) significa: N (valor omisión) No se recogen ni se utilizan las estadísticas de los subelementos. Y Recogida de las estadísticas de los subelementos. Uso de un algoritmo de subelementos de longitud variable que utiliza estas estadísticas, junto con un valor por omisión para el parámetro del algoritmo en el caso de columnas con estadísticas de subelementos positivas. num2 Recogida de las estadísticas de subelementos. Uso de un algoritmo de subelementos de longitud variable que utiliza estas estadísticas, junto con num2 como el parámetro del algoritmo en el caso de columnas con estadísticas de subelementos positivas.
Si el valor de DB2_LIKE_VARCHAR sólo contiene el primer término, no se recoge ninguna estadística de los subelementos y no se tienen en cuenta las que se haya recogido anteriormente. El valor especificado afecta a cómo el optimizador calcula la selectividad de predicados LIKE comodín de la misma forma que antes; es decir:
Si el valor de DB2_LIKE_VARCHAR contiene dos términos y el segundo es Y o una constante de coma flotante, las estadísticas de los subelementos de columnas de serie de juego de caracteres de un solo byte del tipo CHAR, VARCHAR, GRAPHIC o VARGRAPHIC se recopilan durante una operación RUNSTATS y se utilizan durante la compilación de consultas que utilizan predicados LIKE comodín. El optimizador utiliza un algoritmo que presupone el modelo de subelementos y utiliza las estadísticas SUB_COUNT y SUB_DELIM_LENGTH, además de un parámetro del algoritmo, para calcular la selectividad del predicado. El parámetro del algoritmo se especifica de la misma forma que el algoritmo inferencial, es decir:
Si, durante la compilación, el optimizador descubre que las estadísticas de los subelementos no se han recogido en la columna implicada en la consulta, se utilizará el algoritmo "inferencial" de los subelementos; es decir, el que se utiliza cuando sólo se especifica el primer término de DB2_LIKE_VARCHAR. Por lo tanto, para que el optimizador pueda utilizar las estadísticas de los subelementos, debe definirse el segundo término de DB2_LIKE_VARCHAR tanto durante RUNSTATS como durante la compilación.
Los valores de las estadísticas de los subelementos pueden visualizarse consultando SYSIBM.SYSCOLUMNS. Por ejemplo:
select substr(NAME,1,16), SUB_COUNT, SUB_DELIM_LENGTH from sysibm.syscolumns where tbname = 'DOCUMENTOS'
Las columnas SUB_COUNT y SUB_DELIM_LENGTH no están presentes en la visualización de las estadísticas SYSSTAT.COLUMNS y por lo tanto no pueden actualizarse.