J'ai vu cet avertissement dans les plans d'exécution de SQL Server 2017:
Avertissements: L'opération a causé des E / S résiduelles [sic]. Le nombre réel de lignes lues était de (3 321 318), mais le nombre de lignes renvoyées était de 40.
Voici un extrait de SQLSentry PlanExplorer:
Afin d'améliorer le code, j'ai ajouté un index non clusterisé, afin que SQL Server puisse accéder aux lignes pertinentes. Cela fonctionne bien, mais normalement il y aurait trop de (grandes) colonnes à inclure dans l'index. Cela ressemble à ceci:
Si j'ajoute uniquement l'index, sans inclure les colonnes, cela ressemble à ceci, si je force l'utilisation de l'index:
De toute évidence, SQL Server pense que la recherche de clé est beaucoup plus coûteuse que les E / S résiduelles. J'ai une configuration de test sans encore beaucoup de données de test, mais lorsque le code entre en production, il doit fonctionner avec beaucoup plus de données, donc je suis assez sûr qu'une sorte d'index NonClustered est nécessaire.
Les recherches de clés sont-elles vraiment si chères , lorsque vous exécutez sur des SSD, que je dois créer des index complets (avec beaucoup de colonnes d'inclusion)?
Plan d'exécution: https://www.brentozar.com/pastetheplan/?id=SJtiRte2X Il fait partie d'une longue procédure stockée. Cherchez IX_BatchNo_DeviceNo_CreatedUTC
.
sys.dm_exec_query_profiles
, nous les revaloriserons à partir des coûts réels par rapport aux estimations). Arrêtez d'utiliser le pourcentage de coût estimé comme un indicateur absolu du coût - il est relatif et il est souvent à l'heure du déjeuner.