Question sur le Query Store de SQL Server ?

Question sur le Query Store de SQL Server ?

Je ne pense pas.

Tout d’abord, conceptuellement, cela n’a pas de sens. Il n’y a aucun moyen pour le moteur de requêtes de savoir qu’une colonne candidate de clé étrangère ne contient pas potentiellement des valeurs provenant d’une autre table ou des valeurs totalement indépendantes. Il ne peut pas avoir confiance que ce qui semble être une clé étrangère basée sur les données actuelles l’est réellement et le sera toujours avec la façon dont le système existe actuellement.

De plus, même s’il pouvait le savoir, il lui serait difficile de faire une recommandation à ce sujet. Parce que clés étrangères signifie contraintes de clés étrangères. Et les contraintes de clés étrangères ont des effets de bord — soit le blocage, soit la mise à null/valeur fixe, soit la cascade des modifications — le moteur de requêtes n’aura aucune idée de laquelle de ces options est correcte pour une relation donnée entre deux entités. Si je supprime une commande comme invalide, alors je veux absolument supprimer les lignes de commande qui s’y trouvaient. Mais si je supprime un produit du catalogue ou le client de la table des personnes, je ne veux pas que cela soit possible si quelqu’un a déjà passé une commande utilisant cette relation. Je dois conserver ces lignes de commande ou cette commande si le client a déjà payé. Je dois connaître le fonctionnement de l’entreprise, ce qui signifie que je dois savoir ce que les entités de la base de données représentent réellement et ce qu’elles signifient vraiment. Cette information n’est pas du tout représentée dans le SGBDR… il n’y a donc aucun moyen pour le Query Store de la connaître.

Enfin, même s’il pouvait déterminer ces deux aspects, l’utilité resterait encore assez faible. L’un des problèmes avec les contraintes de clés étrangères est que les effets de bord de blocage/mise à jour/cascade signifient que les applications interagissant avec les données du système doivent exécuter les requêtes dans le bon ordre. Avant d’insérer ici, vous devez insérer là. Si vous supprimez ici, vous devez d’abord mettre à jour là. L’ensemble de l’application doit être écrit en sachant que ces contraintes de clés étrangères existent et fonctionnent d’une certaine manière.

Je pense que le mieux que le Query Store puisse faire, c’est recommander un index sur une colonne que vous utilisez

(Réponse tronquée)