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

Langage SQL Discussion :

[SQL2K] Probleme d'optimisation


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mai 2008
    Messages : 1
    Par défaut [SQL2K] Probleme d'optimisation
    Bonjour à vous,


    Etant relativement débutant dans les bases de données, il faut que j' optimise des requetes existantes pour arriver à un résultat correct...


    la requete en cause:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    SELECT DISTINCT OULINE.OBCONO AS XXCONO, 
    OULINE.OBWHLO AS XXWHLO, 
    OULINE.OBITNO AS XXITNO, 
    OUATTR.AHAALF AS XXPACT, 
                          OULINE.OBCUNO AS XXCUNO, 
    OCUSMA.OKCUNM AS XXCUNM, 
    LEATTR.AHAALF AS XXECVE, 
    ISNULL((SELECT     SUM((ISNULL(INLINE.OBRNQT, 0) 
     + ISNULL(INLINE.OBALQT, 0) + ISNULL(INLINE.OBPLQT, 0)))
                                  FROM         OOLINE INLINE
                                  WHERE     INLINE.OBCUNO = OULINE.OBCUNO 
    AND INLINE.OBWHLO = OULINE.OBWHLO 
    AND INLINE.OBCONO = OULINE.OBCONO 
    AND INLINE.OBATNR IN
                                                            (SELECT     INATTR.AHATNR
     FROM          MOATTR INATTR, 
      MOATTR RIATTR
     WHERE      INATTR.AHATID = 'CDT' 
     AND INATTR.AHAALF = OUATTR.AHAALF 
     AND INATTR.AHATNR = RIATTR.AHATNR 
     AND RIATTR.AHATID = 'IND' 
     AND RIATTR.AHAALF = LEATTR.AHAALF) 
    AND INLINE.OBITNO = OULINE.OBITNO 
    AND INLINE.OBDSDT < (CONVERT(int, CONVERT(varchar(30), GETDATE(), 112)))), 0) AS Q12
    FROM         dbo.OOLINE OULINE 
    INNER JOIN dbo.MOATTR OUATTR ON OULINE.OBATNR = OUATTR.AHATNR INNER JOIN dbo.MOATTR LEATTR ON OUATTR.AHATNR = LEATTR.AHATNR AND OUATTR.AHCONO = LEATTR.AHCONO 
    INNER JOIN dbo.OCUSMA OCUSMA ON OULINE.OBCUNO = OCUSMA.OKCUNO AND OULINE.OBCONO = OCUSMA.OKCONO
    WHERE     (LEATTR.AHATID = 'IND') 
    AND (OUATTR.AHATID = 'CDT') 
    AND (OULINE.OBDSDT <= CONVERT(int, CONVERT(varchar(30), GETDATE(), 112)) + 35) 
    AND (SUBSTRING(OULINE.OBORST, 1, 1) < '6') 
    AND (SUBSTRING(OULINE.OBORST, 1, 1) >= '2')
    Donc pour les infos utiles:

    Tables
    _ooline : environ 400 000 enregistrements
    _moattr : environ 9 000 000 enregistrements

    Nombre d'enregistrements retournés : 6900

    Pour la table OOLINE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    CREATE TABLE [OOLINE] (
        [OBCONO] [smallint] NOT NULL ,
        [OBDIVI] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [OBORNO] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [OBPONR] [smallint] NOT NULL ,
        [OBPOSX] [tinyint] NOT NULL ,
        [OBORST] [char] (2) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [OBFACI] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [OBWHLO] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [OBITNO] [char] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [OBORQT] [decimal](15, 6) NOT NULL ,
        [OBRNQT] [decimal](15, 6) NOT NULL ,
        [OBALQT] [decimal](15, 6) NOT NULL ,
        [OBPLQT] [decimal](15, 6) NOT NULL ,
        [OBDLQT] [decimal](15, 6) NOT NULL ,
        [OBIVQT] [decimal](15, 6) NOT NULL ,
        [OBNEPR] [decimal](17, 6) NOT NULL ,
        [OBDWDT] [int] NOT NULL ,
        [OBCODT] [int] NOT NULL ,
        [OBDWDZ] [int] NOT NULL ,
        [OBCODZ] [int] NOT NULL ,
        [OBUCOS] [decimal](17, 6) NOT NULL ,
        [OBUCCD] [tinyint] NOT NULL ,
        [OBDLSP] [char] (12) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [OBCUNO] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [OBCUOR] [char] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [OBINPR] [decimal](17, 6) NOT NULL ,
        [OBDSDT] [int] NOT NULL ,
        [OBDSHM] [smallint] NOT NULL ,
        [OBPLDT] [int] NOT NULL ,
        [OBFDED] [int] NOT NULL ,
        [OBLDED] [int] NOT NULL ,
        [OBATNR] [decimal](17, 0) NOT NULL ,
        [OBRGDT] [int] NOT NULL [/quote]
    Pour la table MOATTR :
    [quote]CREATE TABLE [MOATTR] (
        [AHCONO] [smallint] NOT NULL ,
        [AHATNR] [decimal](17, 0) NOT NULL ,
        [AHATID] [char] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [AHAALF] [char] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
    ) ON [PRIMARY]
    GO
    Pour les index :

    _ahcono et ahaalf sur MOATTR
    _obcono, obdivi, obwhlo, obalqt, obplqt sur OOLINE


    Auriez vous des trucs qui vous choqueraient au niveau des performances ?

    Sinon, si le post n' est pas conforme ou qu' il y a des choses qui ne vont pas, n' hésiter pas

    Merci d'avance

  2. #2
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    oui, des fonctions dans les clauses WHERE déja (SUBSTRING)... qui ne permettront pas l'utilisation d'index
    Le DISTINCT indique veritablement que vos clauses ne sont pas assez restrictives (peut etre des conditions de jointures manquantes).
    Indentez vos requetes, utilisez des jointures explicites qui vous permettront de séparer vos conditions de jointures.

    L'analyse de performances ne peut pas se faire que sur l'analyse de la requete. Le plan d'execution aiderait beaucoup, mais dans votre cas, je pens que les FULL tables sont systematiques, d'ou les performances horribles.

    Je pense que vous avez un tres gros travail d'analyse de vos requetes, schemas et volumetrie pour ameliorer vos requêtes.

    Bon courage

Discussions similaires

  1. Probleme d'optimisation (Delphi7+firebird1.5)
    Par nassoft dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/05/2007, 13h19
  2. [SQL2K] Probleme de conversion
    Par garf01 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/03/2007, 16h22
  3. probleme d'optimisation de fonction
    Par franc82 dans le forum C++
    Réponses: 3
    Dernier message: 31/10/2006, 09h45
  4. [Probleme Changé]Optimisation de l'affichage de jeu
    Par RadicalBob dans le forum Langage
    Réponses: 23
    Dernier message: 18/06/2006, 04h07
  5. [VBA-E]Probleme d'optimisation
    Par sk8bcn dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 30/05/2006, 20h14

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