Créer un repère de plan
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance
Les repères de plan influencent l'optimisation des requêtes en attachant des indicateurs de requête ou un plan fixe de requête à celles-ci. Dans le repère de plan, vous spécifiez l’instruction que vous voulez optimiser et une clause OPTION contenant les indicateurs de requête à utiliser. ou un plan de requête spécifique à utiliser pour optimiser la requête. Lorsque la requête s’exécute, l’optimiseur de requête fait correspondre l’instruction Transact-SQL au repère de plan et soit attache la clause OPTION à la requête lors de l’exécution, soit utilise le plan de requête spécifié.
Un repère de plan applique un plan de requête fixe et/ou des indicateurs de requête à une requête.
Limitations et restrictions
Les arguments de sp_create_plan_guide doivent être indiqués dans l'ordre affiché. Quand vous fournissez des valeurs pour les paramètres de sp_create_plan_guide, tous les noms de paramètres doivent être spécifiés explicitement, ou aucun nom ne doit être spécifié. Par exemple, si @name = est spécifié, @stmt = , @type =, et ainsi de suite, doivent l’être aussi. De même, si @name = est omis et que seule la valeur du paramètre est indiquée, les noms de paramètres restants doivent également être omis, et seules leurs valeurs doivent être indiquées. Les noms d'arguments sont utilisés à des fins descriptives uniquement, pour une meilleure compréhension de la syntaxe. SQL Server ne vérifie pas que le nom de paramètre spécifié correspond au nom du paramètre à l’emplacement où le nom est utilisé.
Vous pouvez créer plusieurs repères de plan OBJECT ou SQL pour la même requête et le même lot ou module. Toutefois, un seul repère de plan peut être activé à un moment donné.
Vous ne pouvez pas créer de repère de plan de type OBJECT pour une valeur @module_or_batch qui fait référence à une procédure stockée, une fonction ou un déclencheur DML temporaire ou qui spécifie la clause WITH ENCRYPTION.
Si vous tentez de supprimer ou de modifier une fonction, une procédure stockée ou un déclencheur DML référencé par un repère de plan, qu'il soit activé ou désactivé, une erreur se produit. Une erreur se produit également si vous tentez de supprimer une table dont un des déclencheurs est référencé par un repère de plan.
autorisations
Pour créer un repère de plan de type OBJECT, il vous faut une autorisation ALTER sur l’objet référencé. Pour créer un repère de plan de type SQL ou TEMPLATE, il vous faut une autorisation ALTER pour la base de données active.
Créer un repère de plan à l’aide de SSM
Cliquez sur le signe plus (+) pour développer la base de données dans laquelle vous souhaitez créer un repère de plan, puis cliquez sur le signe plus (+) pour développer le dossier Programmabilité .
Faites un clic droit sur le dossier Repères de plan et sélectionnez Nouveau repère de plan....
Dans la boîte de dialogue Nouveau repère de plan , dans la zone Nom , entrez le nom du repère de plan.
Dans la zone Instruction, saisissez l’instruction Transact-SQL en fonction de laquelle le repère de plan doit être appliqué.
Dans la liste déroulante Type d’étendue, sélectionnez le type d’entité dans lequel figure l’instruction Transact-SQL. Ce type spécifie le contexte pour la mise en correspondance de l’instruction Transact-SQL avec le repère de plan. Les valeurs possibles sont OBJECT, SQLet TEMPLATE.
Dans la zone Lot de l’étendue, saisissez le texte du lot dans lequel figure l’instruction Transact-SQL. Le texte du lot ne peut pas inclure d’instruction
USE
database. La zone Lot de l'étendue est disponible uniquement lorsque SQL est sélectionné comme type d'étendue. Si aucune valeur n'est entrée dans la zone Lot de l'étendue lorsque SQL est le type de portée, la valeur du texte du lot est la même que celle figurant dans la zone Instruction .Dans la liste Nom de schéma de l'étendue , entrez le nom du schéma dans lequel l'objet est contenu. La zone Nom de schéma de l'étendue est disponible uniquement lorsque Objet est sélectionné comme type d'étendue.
Dans la zone Nom d’objet de l’étendue, saisissez le nom de la procédure stockée Transact-SQL, la fonction scalaire définie par l’utilisateur, la fonction table à instructions multiples ou le déclencheur DML dans lequel figure l’instruction Transact-SQL. La zone Nom d'objet de l'étendue est disponible uniquement lorsque Objet est sélectionné comme type d'étendue.
Dans la zone Paramètres, saisissez le nom de paramètre et le type de données de tous les paramètres incorporés dans l’instruction Transact-SQL.
Les paramètres s'appliquent uniquement lorsque l'une des conditions suivantes est remplie :
Le type de portée est SQL ou TEMPLATE. Si le type est TEMPLATE, les paramètres ne doivent pas avoir la valeur NULL.
L’instruction Transact-SQL est soumise en utilisant sp_executesql et une valeur pour le paramètre est spécifiée, ou SQL Server soumet en interne une instruction après l’avoir paramétrée.
Dans la zone Indicateurs, saisissez les indicateurs de requête ou le plan de requête à appliquer à l’instruction Transact-SQL. Pour spécifier un ou plusieurs indicateurs de requête, entrez une clause OPTION valide.
Cliquez sur OK.
Création d’un repère de plan à l’aide de T-SQL
Dans l' Explorateur d'objets, connectez-vous à une instance du Moteur de base de données.
Dans la barre d'outils standard, cliquez sur Nouvelle requête.
Copiez et collez l'exemple suivant dans la fenêtre de requête, puis cliquez sur Exécuter.
-- creates a plan guide named Guide1 based on a SQL statement EXEC sp_create_plan_guide @name = N'Guide1', @stmt = N'SELECT TOP 1 * FROM Sales.SalesOrderHeader ORDER BY OrderDate DESC', @type = N'SQL', @module_or_batch = NULL, @params = NULL, @hints = N'OPTION (MAXDOP 1)';
Pour plus d’informations, consultez sp_create_plan_guide (Transact-SQL).