SR0015: Extrair a chamadas de função determinista onde predicados
RuleId |
SR0015 |
<strong>Categoria</strong> |
Microsoft.Performance |
Alteração significativa |
Não-separável |
Causa
Um predicado onde contém uma ou mais chamadas de função determinista.
Descrição da regra
Em um predicado de onde uma chamada de função é determinística se seu valor não depende dos dados selecionados. Essas chamadas poderiam causar varreduras de tabela desnecessários, o que diminuem o desempenho do banco de dados.
Como corrigir violações
Para resolver esse problema, você pode atribuir o resultado da chamada para uma variável que você usa no predicado onde.
Quando suprimir avisos
Você pode suprimir esse aviso se a tabela ou tabelas que o predicado onde referencia nunca conterá mais de algumas linhas.
Exemplo
No primeiro exemplo, o procedimento armazenado inclui uma chamada de função determinista, ABS(@param1), no predicado onde. No segundo exemplo, uma variável temporária contém o resultado da chamada.
CREATE PROCEDURE [dbo].[Procedure2WithWarning]
@param1 INT = 0,
AS
BEGIN
SELECT [c1], [c2], [c3], [SmallString]
FROM [dbo].[Table1]
WHERE [c2] > ABS(@param1)
END
CREATE PROCEDURE [dbo].[Procedure2Fixed]
@param1 INT = 0,
AS
BEGIN
DECLARE @AbsOfParam1 INT
SET @AbsOfParam1 = ABS(@param1)
SELECT [c1], [c2], [c3], [SmallString]
FROM [dbo].[Table1]
WHERE [c2] > @AbsOfParam1
END
Consulte também
Conceitos
Analisando o código do banco de dados para melhorar a qualidade do código