post icon

Cual es la diferencia entre un Unique Index y Unique Constraint

Tanto desarrolladores como DBA’s  en algún momento nos llegamos a preguntar cual es la diferencia entre el Unique Constraint y el Unique Index, en gran manera ambos cumplen con la misma función y en la práctica en el 99%  de los casos no habrá diferencia si usamos uno u otro para impedir que se dupliquen valores en una o más columnas que componen al objeto.

De hecho que al crear el Unique Constraint el mismo crea por debajo otro Indice Unico nonclustered automáticamente. Como vengo diciendo en la mayoría de los casos, la diferencia es conceptual más que nada, ¿que significa esto?. Quiere decir que los constraint se utilizan para representar reglas de negocios y los indices únicos más bien es una característica de tunning del motor, ésta diferencia nos ayuda a crear una especie de documentación tácita de nuestra Base de Datos, así cualquier persona que deba mantener entenderá rápidamente que está viendo.

Las diferencias reales entre ambos son las siguientes:

  1. Performance/Tunning: En situaciones particulares a la hora de hacer tunning de la BD es mucho más conveniente utilizar un índice ante el constraint ya que el índice ofrece mayor flexibilidad de configuración, como decía, el Unique Constraint crea automáticamente un índice pero a éste no es posible setearle el valor del FILLFACTOR, ni el tipo de orden Ascendente o Descendente y otras caracteristicas particulares que son manipulables en un índice tradicional.
  2. Llave Foránea: A partir de un Unique Constraint podemos crear referencias de FK en otras tablas, pero no así a partir de índices únicos.
  3. Índices Filtrados: a partir de las versión 2008 de SQL Server se pueden crear índices que afectan sólo a una cantidad definida de registros de una tabla, característica que permite incluir valores nulos en índices únicos, además de crear un árbol más pequeño por ende menor consumo de espacio en disco (excelente característica para índices con grandes volúmenes de datos), en cambio los Unique Constraint obligatoriamente afectan a todos los registros de una tabla.
  4. Vistas Indexadas: ésta característica no se encuentra en todos los motores del mercado pero sí en SQL Server y Oracle y aplica a varios contextos como cuando necesitamos ciertos valores repetidos en el conjunto pero ciertos valores no, también es útil si necesitamos valores no repetidos en un conjunto de datos generados a partir de varias tablas, lo cual lograríamos con el índice ya que el constraint solo afecta a una tabla en sí.

Las conclusiones  las pueden sacar solos ;-P

Comentarios desde Facebook:

Responder