J'ai du mal à formuler cette question de manière à ne pas afficher de résultats pour les colonnes calculées indexées persistantes.Microsoft SQL Server traitera-t-il efficacement une colonne calculée non persistante?
Ma question est, si j'ai une table telle que:
CREATE TABLE Customers (
ID int,
Name nvarchar(50),
Balance money,
HasBalance AS CONVERT(bit, CASE WHEN Balance > 0 THEN 1 ELSE 0 END)
)
En supposant qu'il y ait un indice sur l'équilibre, serait le processeur de requêtes SQL traiter efficacement une requête telle que:
SELECT ID, Name, Balance
FROM Customers
WHERE HasBalance = 1
Est-ce que cela va essentiellement "inline" l'expression de la colonne calculée comme si j'avais spécifié le cas directement dans la requête?
Que se passerait-il si l'expression de la colonne calculée se trouvait dans une fonction non-définie par l'utilisateur de schemabound?
EDIT
Mon exemple était pas génial car, comme il est indiqué, la colonne HasBalance ne serait pas une très bonne distribution des données. Mais ignorant un instant l'efficacité de l'index lui-même, le processeur de requête traitera-t-il essentiellement la requête ci-dessus comme indiqué ci-dessous lors de la sélection d'un index et du choix d'un plan d'exécution?
SELECT ID, Name, Balance
FROM Customers
WHERE Balance > 0
J'ai mis à jour ma question pour ajouter plus de contexte et dans ce temps je vois que vous avez assez lu mon esprit avec votre édition. Il semblerait donc que les deux requêtes ne seront pas traitées de la même manière. – Josh