Crear índices únicos

La creación de un índice único garantiza el fracaso de cualquier intento de duplicar valores de clave. No existen diferencias significativas entre crear una restricción UNIQUE y crear un índice único que es independiente de una restricción. La validación de datos se produce de igual modo y el optimizador de consultas no distingue entre un índice único creado mediante una restricción o creado manualmente. Sin embargo, debe crearse una restricción UNIQUE en la columna cuando el objetivo es la integridad de los datos. Esto deja claro el objetivo del índice.

Implementaciones habituales

Los índices únicos se implementan de las formas siguientes:

  • Restricción PRIMARY KEY o UNIQUE
    Cuando se crea una restricción PRIMARY KEY, se crea automáticamente un índice agrupado único en las columnas si aún no existe un índice agrupado en la tabla o no se ha especificado un índice no agrupado. La columna de clave principal no puede permitir valores NULL.
    Cuando cree una restricción UNIQUE, se creará un índice no agrupado único para exigir una restricción UNIQUE de forma predeterminada. Si aún no existe ningún índice agrupado en la tabla, puede especificar un índice agrupado único.
    Para obtener más información, vea Restricciones PRIMARY KEY y Restricciones UNIQUE.
  • Índice independiente de una restricción
    Es posible definir varios índices no agrupados únicos en cualquier tabla.
    Para obtener más información, vea CREATE INDEX (Transact-SQL).
  • Vistas indizadas
    Para crear una vista indizada, se define un índice agrupado único en una o varias columnas de una vista. La vista se ejecuta (materializa) y el conjunto de resultados se almacena en el nivel hoja del índice, del mismo modo en que los datos de la tabla se almacenan en un índice agrupado. Para obtener más información, vea Crear vistas indizadas.

Resolver problemas de valores duplicados

No se puede crear una restricción UNIQUE ni un índice único si existen valores duplicados en las columnas de clave. Si, por ejemplo, desea crear un índice compuesto único en las columnas FirstName y LastName, pero hay dos filas de la tabla que contienen los valores 'Jane' y 'Smith' en las columnas FirstName y LastName , no se puede crear el índice único. Este problema se puede resolver de una de las siguientes maneras:

  • Agregar o quitar columnas de la definición de índice para crear un índice compuesto único. En el ejemplo anterior, puede que al agregar una columna MiddleName a la definición de índice se resuelva el problema de duplicación.
  • Si los valores duplicados son consecuencia de errores de entrada de datos, corrija manualmente los datos y cree el índice o la restricción.

Usar la opción IGNORE_DUP_KEY para controlar valores duplicados

Cuando se crea o modifica un índice único o una restricción UNIQUE, se puede establecer la opción IGNORE_DUP_KEY en ON o en OFF. Esta opción especifica la respuesta al error para valores de clave duplicados en una instrucción INSERT de varias filas una vez creado el índice. Cuando IGNORE_DUP_KEY se establece en OFF (el valor predeterminado), SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) rechaza todas las filas de la instrucción cuando una o varias filas contienen valores de clave duplicados. Cuando se establece en ON, sólo se rechazan las filas que contienen valores de clave duplicados; los valores de clave no duplicados se agregan.

Por ejemplo, si una sola instrucción inserta 20 filas en una tabla con un índice único, pero 10 de esas filas contienen valores de clave duplicados, se rechazarán las 20 filas de forma predeterminada. Sin embargo, si la opción de índice IGNORE_DUP_KEY se establece en ON, sólo se rechazarán los 10 valores de clave duplicados; los 10 valores no duplicados se insertarán en la tabla.

La configuración de la opción se almacena en los metadatos del índice. Para mostrar la configuración actual, utilice la vista de catálogo sys.indexes.

[!NOTA] No se puede especificar IGNORE_DUP_KEY para un índice creado en una vista o para un índice XML.

Controlar valores NULL

A efectos de índices, los valores NULL son comparables a igual. Por lo tanto, no se puede crear un índice único, ni una restricción UNIQUE, si los valores de clave son NULL en más de una fila. Seleccione columnas que se hayan definido como NOT NULL al elegir columnas para un índice único o una restricción UNIQUE.

Requisitos de espacio en disco

El proceso para determinar los requisitos de espacio en disco para los índices únicos es el mismo que el de los índices agrupados y no agrupados. Para obtener información acerca de los requisitos de espacio en disco para índices, vea Determinar requisitos de espacio en disco del índice.

Para crear un índice durante la creación de una tabla

CREATE TABLE (Transact-SQL)

Para crear un índice en una tabla existente

CREATE INDEX (Transact-SQL)

Vea también

Conceptos

Factor de relleno
index create memory (opción)
Modificar índices
Colocar índices en grupos de archivos
Restricciones PRIMARY KEY
Restricciones UNIQUE

Otros recursos

ALTER INDEX (Transact-SQL)
sys.indexes (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005