Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment créer un index pour une colonne de chaîne en SQL ?

Si votre chaîne fait plus de 900 octets, elle ne peut pas être une clé d'index, qu'elle soit de longueur variable ou fixe.

Une idée serait au moins de rendre les recherches plus sélectives en ajoutant une colonne calculée. ex.

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

Désormais, lorsque vous recherchez une ligne à mettre à jour, vous pouvez dire :

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

Cela aidera au moins l'optimiseur à affiner sa recherche jusqu'aux pages d'index où la correspondance exacte est la plus susceptible de se trouver. Vous voudrez peut-être expérimenter cette longueur car cela dépend du nombre de chaînes similaires que vous avez et de ce qui aidera le mieux l'optimiseur à éliminer une seule page. Vous pouvez également essayer d'inclure certaines ou toutes les autres colonnes dans le ss index, avec ou sans l'utilisation de INCLUDE clause (son utilité variera considérablement en fonction de divers facteurs tels que ce que fait votre requête de mise à jour, le rapport lecture/écriture, etc.).