Tengo una tabla que contiene, por ejemplo, dos campos que quiero que sean únicos dentro de la base de datos. Por ejemplo:Cómo creo una restricción única de columna múltiple en SQL Server
create table Subscriber (
ID int not null,
DataSetId int not null,
Email nvarchar(100) not null,
...
)
La columna de ID es la clave principal y tanto DataSetId como Email están indexados.
Lo que quiero poder hacer es evitar que aparezca la misma combinación de Email y DataSetId en la tabla o, para decirlo de otra manera, el valor de Email debe ser exclusivo para un DataSetId determinado.
intenté crear un índice único en las columnas
CREATE UNIQUE NONCLUSTERED INDEX IX_Subscriber_Email
ON Subscriber (DataSetId, Email)
pero he encontrado que esto tuvo un impacto muy significativo en el tiempo de búsqueda (en la búsqueda de una dirección de correo electrónico, por ejemplo - hay 1,5 millones de filas de la mesa).
¿Existe alguna manera más eficiente de lograr este tipo de restricciones?
¿Está diciendo que la búsqueda SIN el índice es considerablemente más rápida que CON el índice? Esto es nuevo para mí, hasta donde yo sé, los índices siempre se crearon para acelerar las búsquedas, NO para ralentizarlas. –
No, eso es todo, pero no debería tener ** ningún ** impacto significativo en sus tiempos de búsqueda ?! ¿De cuánto impacto estamos hablando? ¿Puedes mostrar el plan de ejecución? ¿Has actualizado tus estadísticas? –
Una búsqueda en una dirección de correo electrónico con índices 'simples' en Email y DataSetId tomó alrededor de 1 segundo. Al agregar el índice compuesto adicional, esto aumentó a alrededor de 9 segundos. – Neilski