- Se você quiser participar em
Purchases.CustomerID
você deve colocar um índice nele. - Se você costuma consultar intervalos de valores, deve colocar um índice nisso também.
Como é, você está pedindo ao servidor SQL para escolher entre dois planos ruins.
O SQL Server pode adivinhar aproximadamente quantas compras serão cobertas pelo
> 1000
consulta e escolherá um plano com base nisso. No entanto, não pode adivinhar quantos serão cobertos pela consulta UDF, portanto, pode escolher um plano diferente. Porque está acontecendo na ignorância, pode ser melhor ou pior do que o outro plano, dependendo de quão bom é o palpite.
Você pode ver os planos gerados e ele informará o número estimado de linhas em cada plano e também o número real. Esses números estimados são responsáveis pela escolha do plano em cada caso.