Crear índices únicos

  • 02/17/2017
  • 5 minutos para leer
    • M
    • M
    • .
    • v
    • c
    • +1
  • Se aplica a: síSQL Server (todas las versiones compatibles) síAzure SQL Database

    Este tema describe cómo crear un índice único en una tabla en SQL Server mediante SQL Server Management Studio o Transact-SQL. Un índice único garantiza que la clave del índice no contiene valores duplicados y, por lo tanto, cada fila de la tabla es de alguna manera única. No hay diferencias significativas entre la creación de una restricción UNIQUE y la creación de un índice único independiente de una restricción. La validación de los datos se produce de la misma manera y el optimizador de consultas no distingue 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 deja claro el objetivo del índice. Para obtener más información sobre las restricciones UNIQUE, consulte Restricciones únicas y Restricciones de verificación.

    Cuando se crea un índice único, se puede establecer una opción para ignorar las claves duplicadas. Si esta opción se establece en Sí y se intenta crear claves duplicadas añadiendo datos que afectan a varias filas (con la sentencia INSERT), la fila que contiene un duplicado no se añade. Si se establece en No, la operación de inserción completa falla y todos los datos se revierten.

    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 puede crear un índice único en varias columnas si la combinación de columnas contiene NULL en más de una fila. Estos se tratan como valores duplicados a efectos de indexación.

    En este tema

    • Antes de empezar:

      Beneficios de un índice único

      Implementaciones típicas

      Limitaciones y restricciones

      Seguridad

    • Para crear un índice único en una tabla, utilizando:

      SQL Server Management Studio

      Transact-SQL

    Antes de empezar

    Beneficios de un índice único

    • Los índices únicos de columnas múltiples garantizan que cada combinación de valores en la clave del índice es única. Por ejemplo, si se crea un índice único en una combinación de columnas Apellido, Nombre y Nombre medio, no habrá dos filas en la tabla que puedan tener la misma combinación de valores para estas columnas.

    • Si los datos de cada columna son únicos, puede crear tanto un índice único agrupado como múltiples índices únicos no agrupados 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 producir planes de ejecución más eficientes.

    Implementaciones típicas

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

    • Restricción PRIMARY KEY o UNIQUE

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

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

      Para obtener más información, consulte Restricciones únicas y restricciones de verificación y Restricciones de clave primaria y foránea.

    • Índice independiente de una restricción

      Se pueden definir múltiples índices únicos no agrupados en una tabla.

      Para obtener más información, consulte CREAR ÍNDICE (Transact-SQL).

    • Vista indexada

      Para crear una vista indexada, se define un índice único agrupado en una o más columnas de la vista. La vista se ejecuta y el conjunto de resultados se almacena en el nivel de 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, consulte Crear vistas indexadas.

    Limitaciones y restricciones

    • No se puede crear un índice único, una restricción UNIQUE o una restricción PRIMARY KEY si existen valores clave duplicados en los datos.

    • Un índice único no agrupado puede contener columnas no clave incluidas. Para obtener más información, consulte Crear índices con columnas incluidas.

    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.

    Utilizando SQL Server Management Studio

    Para crear un índice único utilizando 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. Despliegue 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/Claves.

  5. En el cuadro de diálogo Índices/Claves, haga clic en Añadir.

  6. Seleccione el nuevo índice en el cuadro de texto Clave primaria/única o índice seleccionado.

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

  8. Seleccione Columnas y, a continuación, haga clic en la elipsis (…).

  9. En el cuadro de diálogo Columnas de índice, en Nombre de columna, seleccione las columnas que desee indexar. Puede seleccionar hasta 16 columnas. Para un rendimiento óptimo, seleccione sólo 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 todas las columnas para el índice estén seleccionadas, haga clic en Aceptar.

  11. En la cuadrícula, en (General), seleccione Es único y luego elija Sí en la lista.

  12. Opcional: en la cuadrícula principal, en Diseñador de tablas, seleccione Ignorar claves duplicadas y luego elija Sí en la lista. Haga esto si desea ignorar los intentos de añadir datos que crearían una clave duplicada en el índice único.

  13. Haga clic en Cerrar.

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

  15. Crear un índice único utilizando 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. Despliegue la carpeta Tablas.

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

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

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

    6. Seleccione la casilla Único.

    7. Debajo de Columnas clave del índice, haga clic en Añadir….

    8. En el cuadro de diálogo Seleccionar columnas de nombre_tabla, seleccione la casilla o casillas de verificación de la columna o columnas de la tabla que se añadirán al índice único.

    9. Haga clic en Aceptar.

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

    Utilizando Transact-SQL

    Para crear un índice único en una tabla

    1. En Object Explorer, conéctese a una instancia de Database Engine.

    2. En la barra 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 
    4. Para obtener más información, consulte CREATE INDEX (Transact-SQL).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *