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

MS SQL Server Discussion :

Optimisation des requetes


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 70
    Points
    70
    Par défaut Optimisation des requetes
    Salut,
    hier j'ai mis le server de la boite a genoux en remplacant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table WHERE (Truc='A' or Truc='B') AND Machin='C' AND BIDULE='D'
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table WHERE Truc IN('A','B') AND Machin NOT IN('A','B') AND BIDULE='D'
    La requete toute simple extrait entre 10 et 1.000 ligne sur 300.000.
    Des qu'on lancait 3 requetes rapprochées le proc bloquait plusieurs secondes à 100%.
    Apres plusieurs heures de test j'ai réussi à réduire la charge du proc de 500% (et sauver la vie du PIII 400 !) en faisant une vue avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table WHERE Truc<='B' AND Machin>'A' AND Bidule='D'
    Le gain des >= par rapport au IN est trés important, le fait de faire une vue semble aussi faire gagner en performance et permet surtout de tester plusieurs solutions sans changer le client chez tout le monde.
    Est ce que quelqu'un sait ou on peut trouver de la doc à ce sujet ?
    Est ce qu'il est préférable d'utiliser des vues, est-ce qu'il vaut mieux des requetes imbriquées ou des Tables liées, quelle est la différence de perf entre =, >=, >, IN etc...
    Toutes les docs se contentent de dire que le moteur SQL fait pour le mieux...
    Ceci dit il est peut etre impossible de dégager des généralités et c'est peut etre mes oignons de trouver ce qui est le plus rapide ?

  2. #2
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Peut-être déjà regarder les index
    niveau truc, bidule, machin ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  3. #3
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 70
    Points
    70
    Par défaut
    ca va de soit que tout est indexé pareil, c'est bien le moteur interne de SQL server qui a des temps de réponses trés différent pour traiter les requetes.
    Je précise qu'apparement tout se passe en RAM et qu'il n'y a aucun accés disque dur...

  4. #4
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Ok tu peux aussi essayer le NOT EXISTS lors de tes tests ...

    "Ceci dit il est peut etre impossible de dégager des généralités et c'est peut etre mes oignons de trouver ce qui est le plus rapide ?"

    Je procéde aussi ainsi, toute façon à force de bosser
    sur des BdD différentes (attention je fais pas de
    l'administration ) j'ai fini par n'intervenir uniquement
    que quand les users se plaignent ...

    Pour anecdote sous Oracle on mettait il fut un temps le/les
    noms des index à utiliser pour telle ou telle requête afin
    d'être sur que c'était ceux là qui allait être utilisés et ...
    le temps d'exécution de la requête était désastreux, on avait
    tout enlevé et ça a résolu le problème
    (ce qui était valable avec une version d'Oracle ne l'était
    plus avec le version suivante)

    Bon je suis pas puriste ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    1) un IN est toujours plus couteux qu'une égalité ou qu'une fourchette BETWEEN en particulier lorsqu'il s'agit de chaines alphanum (coorespondances avec collation)

    2) les vues sontdes élements statiques, alors que les requêtes (la plupart hélas) sont dynamiques. Cepandant, on peut "préparer" une requête qui doit être jouée plusieurs fois afin de s'afranchir des requêtes préparatoires.

    3) l'utilisation de l'étoile est contre performante

    A lire :
    http://sqlpro.developpez.com/OptimSQL/SQL_optim.html

    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/ * * * * *

  6. #6
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 70
    Points
    70
    Par défaut
    Honte à moi qui avait raté la rubrique !
    Merci pour la page sur l'optimisation des SGDB et tout ton site qui m'a appris plein de trucs !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimiser des requetes
    Par lodan dans le forum Requêtes
    Réponses: 10
    Dernier message: 01/04/2009, 11h29
  2. Optimisation des Requete Tsql a l'aide des index
    Par AzizMaroc dans le forum Développement
    Réponses: 2
    Dernier message: 13/03/2009, 11h42
  3. Ajax & Optimisation des requetes HTTP
    Par Spir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/09/2008, 11h27
  4. Optimisation des requetes SQL
    Par elharet dans le forum SQL
    Réponses: 3
    Dernier message: 14/11/2007, 21h26
  5. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09

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