In index max length is 900 bytes anyway, por lo que no puede indexar NVARCHAR (2000).
Una clave de índice más grande significa menos teclas en las páginas de índice, por lo que crea un árbol más grande, más disco utilizado, más E/S, más extracción del búfer, menos almacenamiento en caché. Para las claves en clúster, esto es mucho peor porque el valor de la clave agrupada se utiliza como el valor de búsqueda en todos los demás índices no agrupados, por lo que aumenta el tamaño de todos los índices.
En última instancia, la métrica de rendimiento de rendimiento más prevalente en una consulta es el número de páginas escaneadas/buscadas. Esto se traduce en lecturas físicas (= tiempo de espera de E/S) o lecturas lógicas (= contaminación de la memoria caché).
Aparte de las consideraciones de espacio, los tipos de datos hacen poca o ninguna diferencia en el comportamiento de una consulta. char/varchar/nchar/nvarchar tienen intercalaciones que deben tenerse en cuenta en las comparaciones, pero el costo de la búsqueda de orden de intercalación generalmente no es un factor decisivo.
Y por último pero no menos importante, probablemente el factor más importante, es su patrón de acceso a las aplicaciones. Indexe las columnas que hacen las consultas de SARGable, no hay absolutamente ningún beneficio en tener que mantener un índice que no sea utilizado por el optimizador.
Y a veces usted tiene que considerar los problemas de concurrencia, como cuando se tiene que eliminar deadlocks caused by distinct update access path to the same record.
actualización después del post editar
uso de una columna de hash MD5 PERSISTED:
create table foo (
bar nvarchar(2000) not null,
[hash] as hashbytes('MD5', bar) persisted not null,
constraint pk_hash unique ([hash]));
go
insert into foo (bar) values (N'Some text');
insert into foo (bar) values (N'Other text');
go
select * from foo
where [hash] = hashbytes('MD5', N'Some text');
go
Tienes que ser muy cuidado con su busca, el hash será diferente violentamente por cualquier diferencia en la entrada, es decir, . si buscan parámetro ASCII en lugar de Unicode uno ...
Vas a tener un decent collision chance si la tabla crece grande.
se necesita para buscar o para hacer cumplir la singularidad? –
@Alex Necesito forzar la exclusividad, pero solo haré las coincidencias exactas. –
Usaría disparadores. –