Compartir a través de


Crear índices únicos

En este tema se describe cómo crear un índice único en una tabla de SQL Server 2014 mediante SQL Server Management Studio o Transact-SQL. Un índice único garantiza que la clave de índice no contiene valores duplicados y, por tanto, cada fila de la tabla es en cierta forma única. No hay diferencias significativas entre crear una restricción UNIQUE y crear un índice único que sea independiente de una restricción. La validación de datos se produce de la misma manera y el optimizador de consultas no diferencia entre un índice único creado por una restricción o creado manualmente. Sin embargo, la creación de una restricción UNIQUE en la columna hace que el objetivo del índice sea claro. Para obtener más información sobre las restricciones ÚNICAS, consulte Restricciones ÚNICAS y Restricciones de Comprobación.

Al crear un índice único, puede establecer una opción para omitir las claves duplicadas. Si esta opción se establece en e intenta crear claves duplicadas agregando datos que afectan a varias filas (con la instrucción INSERT), no se agrega la fila que contiene un duplicado. Si se establece en No, se produce un error en toda la operación de inserción y se revierten todos los datos.

Nota:

No se puede crear un índice único en una sola columna si esa columna contiene NULL en más de una fila. Del mismo modo, no se puede crear un índice único en varias columnas si la combinación de columnas contiene NULL en más de una fila. Se tratan como valores duplicados con fines de indexación.

En este tema

Antes de empezar

Ventajas de un índice único

  • Los índices únicos de varias columnas garantizan que cada combinación de valores de la clave de índice sea única. Por ejemplo, si se crea un índice único en una combinación de columnas LastName, FirstName y MiddleName , no puede haber dos filas en la tabla la misma combinación de valores para estas columnas.

  • Siempre que los datos de cada columna sean únicos, puede crear un índice clúster único y varios índices no clúster únicos en la misma tabla.

  • Los índices únicos garantizan la integridad de los datos de las columnas definidas.

  • Los índices únicos proporcionan información adicional útil para el optimizador de consultas que puede generar planes de ejecución más eficaces.

Implementaciones típicas

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

  • Restricción de clave primaria o único

    Al crear una restricción PRIMARY KEY, se crea automáticamente un índice clúster único en la columna o columnas si aún no existe un índice agrupado en la tabla y no se especifica un índice no clúster único. La columna de clave principal no puede permitir valores NULL.

    Cuando se crea una restricción UNIQUE, se crea un índice no clúster único para aplicar una restricción UNIQUE de forma predeterminada. Puede especificar un índice clúster único si aún no existe un índice agrupado en la tabla.

    Para obtener más información, consulte Restricciones únicas y Restricciones de comprobación y Restricciones de clave principal y clave externa.

  • Índice independiente de una restricción

    Se pueden definir varios índices no clúster únicos en una tabla.

    Para más información, consulte CREATE INDEX (Transact-SQL).

  • Vista indizada

    Para crear una vista indizada, se define un índice clúster único en una o varias columnas de vista. La vista se ejecuta y el conjunto de resultados se almacena en el nivel hoja del índice de la misma manera que los datos de la tabla se almacenan en un índice agrupado. Para obtener más información, vea Crear vistas indexadas.

Limitaciones y restricciones

  • Un índice único, una restricción UNIQUE o una restricción PRIMARY KEY no se pueden crear si existen valores de clave duplicados en los datos.

  • Un índice no clúster único puede incluir columnas sin clave. Para más información, consulte Create Indexes with Included Columns.

Seguridad

Permisos

Requiere el permiso ALTER en la tabla o vista. El usuario debe ser miembro del rol fijo de servidor sysadmin o de los roles fijos de base de datos db_ddladmin y db_owner.

Uso de SQL Server Management Studio

Para crear un índice único mediante el Diseñador de tablas

  1. En el Explorador de objetos, expanda la base de datos que contiene la tabla en la que desea crear un índice único.

  2. Expanda la carpeta Tablas .

  3. Haga clic con el botón derecho en la tabla en la que desea crear un índice único y seleccione Diseño.

  4. En el menú Diseñador de tablas , seleccione Índices o claves.

  5. En el cuadro de diálogo Índices o claves , haga clic en Agregar.

  6. Seleccione el nuevo índice en el cuadro de texto Clave principal/única seleccionada o Índice .

  7. En la cuadrícula principal, en (General), seleccione Tipo y, a continuación, elija Índice en la lista.

  8. Seleccione Columnas y haga clic en los puntos suspensivos (...).

  9. En el cuadro de diálogo Columnas de índice, en Nombre de columna, seleccione las columnas que desea indexar. Puede seleccionar hasta 16 columnas. Para obtener un rendimiento óptimo, seleccione solo una o dos columnas por índice. Para cada columna que seleccione, indique si el índice organiza los valores de esta columna en orden ascendente o descendente.

  10. Cuando se seleccionan todas las columnas del índice, haga clic en Aceptar.

  11. En la cuadrícula, en (General), seleccione Es único y, a continuación, elija en la lista.

  12. Opcional: en la cuadrícula principal, en Diseñador de tablas, seleccione Omitir claves duplicadas y, a continuación, elija en la lista. Haga esto si desea omitir los intentos de agregar datos que crearían una clave duplicada en el índice único.

  13. Haga clic en Cerrar.

  14. En el menú Archivo , haga clic en Guardartable_name.

Creación de un índice único mediante el Explorador de objetos

  1. En el Explorador de objetos, expanda la base de datos que contiene la tabla en la que desea crear un índice único.

  2. Expanda la carpeta Tablas .

  3. Expanda la tabla en la que desea crear un índice único.

  4. Haga clic con el botón derecho en la carpeta Índices , seleccione Nuevo índice y seleccione Índice no agrupado....

  5. En el cuadro de diálogo Nuevo índice , en la página General , escriba el nombre del nuevo índice en el cuadro Nombre del índice.

  6. Seleccione la casilla Única.

  7. En Columnas de clave de índice, haga clic en Agregar....

  8. En el cuadro de diálogo Seleccionar columnas detable_name, marque la(s) casilla(s) de la(s) columna(s) de la tabla que se van a agregar al índice único.

  9. Haz clic en Aceptar.

  10. En el cuadro de diálogo Nuevo índice , haga clic en Aceptar.

Uso de Transact-SQL

Para crear un índice único en una tabla

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.

  2. En la barra de Estándar, haga clic en Nueva consulta.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.

    USE AdventureWorks2012;  
    GO  
    -- Find an existing index named AK_UnitMeasure_Name and delete it if found  
    IF EXISTS (SELECT name from sys.indexes  
               WHERE name = N'AK_UnitMeasure_Name')   
       DROP INDEX AK_UnitMeasure_Name ON Production.UnitMeasure;   
    GO  
    -- Create a unique index called AK_UnitMeasure_Name  
    -- on the Production.UnitMeasure table using the Name column.  
    CREATE UNIQUE INDEX AK_UnitMeasure_Name   
       ON Production.UnitMeasure (Name);   
    GO  
    

Para más información, consulte CREATE INDEX (Transact-SQL).