IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

[2005] Forcer le Query optimizer à suivre un ordre partielle ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut [2005] Forcer le Query optimizer à suivre un ordre partielle ?
    Bonjour,

    J'ai un query qui me pose de gros problèmes et j'aurais besoin de pouvoir forcer le query optimizer à commencer l'évaluation d'une table avant les autres (car le query optimizer me fait un tas d'autres choses absolument inutiles avant d'y venir et d'y découvrir que tout ce qu'il a fait précédemment est bon pour la poubelle).

    Je veux que le QO passe d'abord par l'information centrale pour ensuite faire ce qu'il faut, plutôt que de faire tout et n'importe quoi pour ensuite filtrer.

    Le query hint FORCE ORDER ne permet pas une telle granularité et est donc dangereux.

    Savez-vous m'aider ?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Il est rare que vous ayez besoin de rectifier un plan de requête (sauf bug manifeste) en espérant gagner du temps.

    Mais vous pouvez toujours le sauvegarder sous forme XML et le chercuter à volonté pour voir... Je doute que vous soyez meilleur que lui en temps de réponse... Ce n'est pas Oracle auquel il faut souvent s'amuser à ce genre de choses....

    Récupérer un plan:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET SHOWPLAN_XML ON
    GO
    SELECT ...
    Forcer un plan récupéré et charcuté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ...
    OPTION (USE PLAN N'<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.0" Build="9.00.4035.00"><BatchSequence><Batch><Statements><StmtSimple StatementText="SELECT * FROM dbo.PurchaseOrder2002" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSubTreeCost="0.00506268" StatementEstRows="272" StatementOptmLevel="TRIVIAL"><StatementSetOptions QUOTED_IDENTIFIER="false" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="false" ANSI_NULLS="false" ANSI_PADDING="false" ANSI_WARNINGS="false" NUMERIC_ROUNDABORT="false"/><QueryPlan CachedPlanSize="9" CompileTime="1" CompileCPU="1" CompileMemory="64"><RelOp NodeId="0" PhysicalOp="Table Scan" LogicalOp="Table Scan" EstimateRows="272" EstimateIO="0.00468498" EstimateCPU="0.0003777" AvgRowSize="74" EstimatedTotalSubtreeCost="0.00506268" Parallel="0" EstimateRebinds="0" EstimateRewinds="0"><OutputList><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="PurchaseOrderID"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="RevisionNumber"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="Status"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="EmployeeID"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="VendorID"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="ShipMethodID"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="OrderDate"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="ShipDate"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="SubTotal"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="TaxAmt"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="Freight"/><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="ModifiedDate"/></OutputList><TableScan Ordered="0" ForcedIndex="0" NoExpandHint="0"><DefinedValues><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="PurchaseOrderID"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="RevisionNumber"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="Status"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="EmployeeID"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="VendorID"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="ShipMethodID"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="OrderDate"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="ShipDate"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="SubTotal"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="TaxAmt"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="Freight"/></DefinedValue><DefinedValue><ColumnReference Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]" Column="ModifiedDate"/></DefinedValue></DefinedValues><Object Database="[Formation]" Schema="[dbo]" Table="[PurchaseOrder2002]"/></TableScan></RelOp></QueryPlan></StmtSimple></Statements></Batch></BatchSequence></ShowPlanXML>')
    Bon courage !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Je connais ça, mais avant d'en arriver là, je me demandais si une direction partielle ne pouvait pas être donnée au QO.

    Par ailleurs mon query est trop complexe pour que le query plan XML puisse être généré (bug connu). Donc je n'ai même pas un plan XML de base (et je n'ai pas trouver comment convertir un plan graphique).

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Donc récrire la réquête et taguer en FORCE ORDER !

    Avant cela je pense que la récriture de la requête avec d'autres technique (CTE par exemple) et une bonne indexation serait certainement plus bénéfique !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Donc récrire la réquête et taguer en FORCE ORDER !

    Avant cela je pense que la récriture de la requête avec d'autres technique (CTE par exemple) et une bonne indexation serait certainement plus bénéfique !

    A +
    J'utilise déjà les CTE et j'ai déjà changé les index et certaines PK.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    et je n'ai pas trouver comment convertir un plan graphique
    Clic droit sur le plan graphique, enregistrer sous (.sqlplan => xml de plan).

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [2005] Astuce : rapidité query avec constante
    Par Sergejack dans le forum Développement
    Réponses: 21
    Dernier message: 28/04/2010, 16h13
  2. [.NET 2005]Query sur plusieurs tables d'un dataset
    Par legillou dans le forum VB.NET
    Réponses: 1
    Dernier message: 01/02/2008, 10h29
  3. Forcer VS 2005 à utiliser le compact framework 1
    Par bobleponge80 dans le forum Windows Mobile
    Réponses: 9
    Dernier message: 22/10/2007, 15h27
  4. Log de toutes les query sur SQL SERVER 2005
    Par yonialhadeff dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/06/2007, 14h00
  5. [Delphi 2005] Lancer des requêtes MicroSoft Query
    Par Frank dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/10/2005, 19h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo