sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo crear un índice para una columna de cadena en sql?

Si su cadena tiene más de 900 bytes, entonces no puede ser una clave de índice, independientemente de si es de longitud variable o fija.

Una idea sería al menos hacer que las búsquedas sean más selectivas agregando una columna calculada. por ejemplo

CREATE TABLE dbo.Strings
(
  -- other columns,
  WholeString VARCHAR(4000),
  Substring AS (CONVERT(VARCHAR(10), WholeString) PERSISTED
);
CREATE INDEX ss ON dbo.Strings(Substring);

Ahora, cuando busque una fila para actualizar, puede decir:

WHERE s.Substring = LEFT(@string, 10)
AND s.WholeString = @string;

Esto al menos ayudará al optimizador a limitar su búsqueda a las páginas de índice donde es más probable que viva la coincidencia exacta. Es posible que desee experimentar con esa longitud, ya que depende de cuántas cadenas similares tenga y qué ayudará mejor al optimizador a eliminar una sola página. También puede experimentar incluyendo algunas o todas las otras columnas en el ss índice, con o sin usar INCLUDE cláusula (si esto es útil variará mucho según varios factores, como qué más hace su consulta de actualización, relación de lectura/escritura, etc.).