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