Souvent, j'ai besoin d'exécuter des requêtes sur de grandes tables qui n'ont pas le bon index. Je demande donc au DBA de créer un tel index. La première chose qu'il fait est de regarder les statistiques de la table et de voir la taille de l'espace d'index.
Souvent, il me disait de trouver une solution alternative car "l'indice est déjà plus grand que le tableau". Il pense que l'index doit être plus petit que les données, parce qu'il m'a dit "avez-vous déjà vu l'index dans un livre? Il est beaucoup plus petit que le livre lui-même, et c'est ainsi qu'un index de table devrait être".
Je ne pense pas que sa philosophie soit correcte, mais je ne peux pas le contester car il est un DBA principal et je suis développeur. Je pense que si une requête a besoin d'un index, l'index doit simplement être créé, au lieu de trouver des "solutions de contournement" qui rendent les SP illisibles et non maintenables.
Je sélectionne uniquement les colonnes requises. Le problème est que je filtre par date, le moteur effectuera donc nécessairement une analyse de table pour correspondre aux colonnes. La requête s'exécute une fois par jour, la nuit, pour recueillir des statistiques, mais son exécution prend 15 minutes (nous avons une autre règle stricte et rapide: aucune procédure ne devrait prendre plus de 3 minutes).
Le DBA m'a montré les statistiques de l'indice. Il y avait environ 10 index sur cette table, dont seulement 6 ont été utilisés (les statistiques ont montré zéro hit pour 4 d'entre eux). Il s'agit d'un grand système auquel participent plus de 20 développeurs. Les index ont été créés pour une raison quelconque et ne sont probablement plus utilisés.
Nous devons prendre en charge SQL Server 2008, car c'est sur cela que les bases de données de test s'exécutent. Mais les clients sont tous sur 2014 et 2016.