SR0004: Evitare l'utilizzo di colonne senza un indice come espressioni di test nei predicati IN
RuleId |
SR0004 |
Category |
Microsoft.Performance |
Breaking Change |
Non sostanziale |
Causa
Un predicato IN fa riferimento a una colonna priva di indice.
Descrizione della regola
Si causa un'analisi di tabella se si utilizza una clausola WHERE che fa riferimento a una o più colonne che non sono indicizzate come parte di un predicato IN. L'analisi della tabella ridurrà le prestazioni.
Come correggere le violazioni
Per risolvere questo problema, è necessario fare una delle modifiche seguenti:
Modifica il predicato IN per fare riferimento soltanto alle colonne che hanno un indice.
Aggiungere un indice a qualsiasi colonna alla quale fa riferimento il predicato IN che non dispone ancora di un indice.
Esclusione di avvisi
È possibile eliminare questo avviso se la tabella non conterrà mai più di alcune righe.
Esempio
In questo esempio, un'istruzione SELECT semplice fa riferimento una colonna, [c1], che è priva di indice. La seconda istruzione definisce un indice che è possibile aggiungere per risolvere questo avviso.
CREATE PROCEDURE [dbo].[Procedure3WithWarnings]
AS
SELECT [Comment]
FROM [dbo].[Table2]
WHERE [c1] IN (1, 2, 3)
CREATE INDEX [IX_Table2_C1]
ON [dbo].[Table2] (c1);
Vedere anche
Concetti
Analisi del codice di database per migliorare la qualità del codice