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:
- Para las búsquedas se puede utilizar un índice con lo que lograremos una mayor rapidez.
- No hay necesidad de utilización de Outer Joins (mayor independencia).
- Brindan una mayor facilidad de entender el código (hay que tener mucho cuidado de no establecer constantes que presten luego a la confusión).
Con nulos:
- Ocupan ninguno o muy poco espacio de almacenamiento.
- Se requiere exploración completa de la tabla para buscar los 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.