jump to navigation

Oracle – Considerando NULLS e índices

Fuente:  http://www.ixora.com.au/tips/design/nulls+indexes.htm

Es una práctica común destinar columnas para las cuales el valor correspondiente de atributo puede a veces no estar disponible, esto es, contener null. Null no es un valor como tal, pero representa la ausencia de un valor. Las columnas que pueden contener nulls son a veces llamadas columnas nullables.

En vez de destinar una columna para ser nullable, es posible hacer la columna obligatoria y definir una o más constantes especiales para usar en casos donde el valor no esté disponible. Por ejemplo, una o ambas de las siguientes constantes especiales podrían ser usadas en una columna que tenga un tipo de dato character.

`VD’ Valor desconocido
`AN’ Atributo no aplicable

Por supuesto, usted tiene que asegurarse que las constantes especiales elegidas caigan fuera del dominio de los valores válidos para el atributo.

La razón más importante para usar constantes especiales en vez de nulls es que las búsquedas para encontrar valores pueden ser llevadas a cabo vía un índice. Sin embargo, hay otros factores que podrían ser considerados también en cada caso. Estas son las consideraciones.

Tamaño de la tabla

Los nulls toman un muy pequeño espacio de almacenamiento, y nada en absoluto si ocurren al final de una fila. Las constantes especiales incrementan el tamaño de la tabla, y esto puede causar requerimientos extra de Entrada/Salida (I/O) para el barrido de la tabla.

Tamaño del índice

Si sólo se espera que un pequeño número de filas tengan valores, permitiendo a la columna ser nullable, se puede reducir mucho el tamaño de un índice en la columna porque las claves null no están indexadas (excepto en claves cluster indexadas).

Búsquedas para valores disponibles

El optimizador puede evaluar predicados IS NOT NULL vía un eficiente, rápido y completo barrido de índices. Si las constantes especiales son usadas en vez de nulls, un camino de acceso de barrido de índices de rango menos eficiente puede ser usado para buscar los otros valores.

Búsquedas para valores faltantes

Dado que las claves nulas no están indexadas, las búsquedas para nulls requieren típicamente un barrido completo de la tabla. Las constantes especiales están indexadas, entonces permiten búsquedas para valores faltantes llevadas a cabo vía un índice. En la mayoría de los casos, el camino de acceso indexado es preferible a un barrido completo de la tabla.

Outer Joins (Juntas externas)

Las constantes especiales eliminan la necesidad de outer joins. Outer joins restringen la elección de órdenes de junta del optimizador, mientras que, de lo contrario, un rango completo de planes de consulta es posible. Comúnmente, los planes de consulta permitidos por el uso de constantes especiales, superan a sus alternativos outer join significativamente.

Elegancia

Algunos argumentan que el uso de constantes especiales en vez de nulls conlleva a un código más fácilmente entendible, y previene la confusión frecuentemente experimentada por los usuarios (sin mencionar desarrolladores y DBAs) en relación a nulls y outer joins.

Inelegancia

Por el contrario, otros encuentran el uso de constantes especiales inelegante, como por ejemplo cuando usamos un -1 para representar una cantidad desconocida, o cuando usamos una época tal como 1-JAN-1900 para representar una fecha desconocida. 


 Conclusiones (Abril 2009)

Abdel Ortega , 3401-0472
Delins Daniel , 3801-0232
Ranone Emmanuel , 3701-1615
Tofful Pedro , 3401-2630
Zamudio Florencia Perez , 3301-2060

El artículo en cuestión, nos comenta las posibilidades de que cuando un atributo no está disponible, podríamos elegir entre introducirle un “nulo” o asignarle constantes especiales, cada una de las cuales tiene ventajas y desventajas.

 Con constantes especiales:

Con nulos:

El encargado del desarrollo de la base de datos tendrá que elegir una de las dos posibilidades teniendo en cuenta cual se satisface mayormente a sus necesidades.


García, Maximiliano         (3801-1812)
Giudice, Matias                 (3801-1293)
Hollmann, Santiago         (3801-1435)
Pariso, Mariela                (3801-0307)
Osorio, Daniela               (3801-0364)
Ufor,Pablo Nahuel          (3801-1197)

Luego de analizar el artículo, concluimos que si bien tanto el hacer las columnas nullables, como el uso de constantes especiales tienen sus beneficios y sus contras, desde nuestro punto de vista, apostamos por el uso de constantes especiales, dado que hoy en día el espacio de almacenamiento no es una problemática fundamental como sí lo es la velocidad, y dichas constantes nos permiten un acceso más veloz a los datos por el hecho de poder aplicar la indexación en su uso.

 


Debole Leonardo 3601-1757
Gonzalez Fernando 3301-2657
Liffourrena Leandro Alejo 3201-0304
Marrone Ignacio 3801-1532
Trotta Franco 3801-0233

El uso de columnas que permitan aplicar el valor nulo a un campo favorecen en relación al tamaño final de la tabla, a la búsqueda de los valores no nulos y reducen el tamaño de los índices generados. Por el contrario, cuando se necesita depurar una tabla de filas corruptas, se requiere de un escaneo completo de tabla ya que los nulos no estarán indexados.

Como variante se plantea reemplazar los nulos por valores que representen de un modo singular los no permitidos, argumentando la simplicidad de entendimiento para la tabla. 

A %d blogueros les gusta esto: