Bonjour,
Ma question concerne l'indexation sur les colonnes calculées et leur incidence sur les performances.
Pour être plus explicite, j'ai une table qui contient une colonne de texte très longue, excédant la capacité d'indexation (limitée à 900 octets par clé), dont la structure actuelle est la suivante :
NB : Il existe déjà un index sur l'ID.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE [dbo].[myTable]( [ID] [int] IDENTITY (1, 1) PRIMARY KEY, [myLongText] [nvarchar](1024) NULL ) ON [PRIMARY] GO CREATE INDEX IX_myTable_myLongText ON dbo.myTable(myLongText) GO
L'idée, pour éviter tout problème d'insertion, est d'indexer non pas sur la colonne elle-même, mais sur une colonne calculée dont on sait la taille limitée et inférieure à la longueur maximale de clé.
Ce qui donnerait à peu près ceci :
Ma question est la suivante : un tel index sera-t-il employé lors d'une recherche sur [myLongText] ou bien me faudra-t-il explicitement faire mes recherches en utilisant la fonction HASHBYTES ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE [dbo].[myTable]( [ID] [int] IDENTITY (1, 1) PRIMARY KEY, [myLongText] [nvarchar](1024) NULL, [myComputedColumn] AS CAST(HASHBYTES('SHA1', [myLongText]) AS BIGINT) PERSISTED ) ON [PRIMARY] GO CREATE INDEX IX_myTable_myComputedColumn ON dbo.myTable(myComputedColumn) GO
Merci d'avance,
Antoine
Partager