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

Bases de données Delphi Discussion :

Lenteur requetes ADO SQL server


Sujet :

Bases de données Delphi

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 42
    Points : 31
    Points
    31
    Par défaut Lenteur requetes ADO SQL server
    Bonjour,

    J'ai le problème suivant : Une application en Delphi 7 sur SQL server 2000 travaille sur des bases de données distinctes. On se connecte sur une base ou sur une autre à l'ouverture du programme.

    Il apparait clairement qu'en fonction du nombre d'enregistrements de l'une ou l'autre des bases de données, les performances des requetes vont de 1 seconde (pour environ 2000 enregistrements) à 6 à 8 secondes (pour 11 000 enreg.) .

    Mes requetes sont des SELECT TOP 50 * From TABLE WHERE MAchin ='bidule', donc elles ramènent toujours 50 enregistrements...

    En quoi le nombre d'enregistrements influe t-il sur la lenteur des requetes.

    Est-ce un probleme d'indexs ???

    Je ne comprends pas

    D'avance merci

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Citation Envoyé par StarMusic
    Est-ce un probleme d'indexs ???
    Très certainement, oui.

    Si ta colonne machin n'est pas indexée, le sgbd doit parcourir l'intégralité de la table à la recherche d'une ligne vérifiant le prédicat.

    Il est hautement recommandé d'indexer les colonnes participant à une clause WHERE, idem pour les jointures... (fais un tour dans la partie sgbd du site, à la recherche des tutos de SQLpro)
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut
    Citation Envoyé par qi130
    Très certainement, oui.
    StarMusic : Tu peut aussi activé les statistiques sur le serveur SQL, ce qui améliore grandement le temps des requetes. En gros ,si besoin, le serveur créera une table de hachage pour la colonne Machin. Ces statisque pouvant être mise a jour automatiquement ou non.

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Merci à vous pour vos réponses.

    Eric.H : je ne sais pas comment on active ces fameuses stats...

    qi130 : J'ai beau créer un tas d'indexs, une requete est toujours aussi lente. J'ai une relation Maitre-Detail et c'est la requete qui porte sur la table détail qui est longue. Pourtant le champ lien entre les 2 tables est indexé des 2 cotés (Maitre et détail).

    Quelqu'un a t-il une idée ?

    D'avance merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Quel est le type des tes colonnes, si tu es en Varchar(X), as-tu essayer en Char(X) ? Cela améliore le temps de réponse des index. Maintenant, trop d'index dans une table ne résoud pas non plus tout les problèmes. Il faut les créer par rapport aux (ensembles de) colonnes qui sont le plus souvent appeller dans les clauses "where".

    Pour les statistiques, c'est une option de la base de données dans l'onglet "Option" qui se nomme "Mettre à jour automatiquement les statistiques".
    Dans Entrepise Manager, sinon tu vérifier les options directement par SQL.

    Tu peux aussi lancer ta requête dans un queryy analyzer et lancer le plan d'exécution. Il donne les parties de ta requête les plus lourdes et s'il faut créer ou non des statistique manuellement.

    Edit :
    Les deux serveurs sont au même endroit ? N'y a-t-il pas un liaison plus plente ?

  6. #6
    Membre averti Avatar de Bejaia-In
    Inscrit en
    Avril 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 365
    Points : 392
    Points
    392
    Par défaut
    Citation Envoyé par StarMusic
    Il apparait clairement qu'en fonction du nombre d'enregistrements de l'une ou l'autre des bases de données, les performances des requetes vont de 1 seconde (pour environ 2000 enregistrements) à 6 à 8 secondes (pour 11 000 enreg.) .
    Requetes lentes ?
    Je vois pas où est la lenteur !
    ....................................................................
    Aidez-vous... Dieu vous aideras et nous aussi..
    ....................................................................

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Bejaia-In
    Je vois pas où est la lenteur !
    6-8 secondes pour une requête sur 11 000 enregistrements c'est trés long surtout avec un top 50.

    Exemple sur ma base :
    Select top 1000 * avec un clause where sur une colonne de caractère, table de 4 000 000 d'enregistrement, temps de réponse 3 secondes.

    Il y a donc des chances que le problème soit plus réseau que bdd.

  8. #8
    Membre averti Avatar de Bejaia-In
    Inscrit en
    Avril 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 365
    Points : 392
    Points
    392
    Par défaut
    N'oublions pas le hardware compte pour beaucoup dans les performances d'un SGBD, donc comparons ce qui comparable.
    ....................................................................
    Aidez-vous... Dieu vous aideras et nous aussi..
    ....................................................................

  9. #9
    Membre à l'essai
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 11
    Points
    11
    Par défaut problèmes de connection base
    bonjour!
    j'utilise dephi 7 et sql server pour une application et je tape le code suivant mais ça me donne une erreur comme quoi ma base a été mal installée hors j'y ai crée des tables, et insére des données.
    Que faire?
    voici le code:
    procedure TForm1.FormActivate(Sender: TObject);

    begin
    with dm.ADOConnection1 do
    begin
    ConnectionString:='Provider=Microsoft SQLServer;DataSource=C:\Program Files\Microsoft SQL Server\80\Tools\Data\Base_plan_DATA.mdf;';
    Connected:=true;
    end;

    with dm.ADOQuery1 do
    begin
    SQL.Add('select * from operateur');
    connection:=dm.ADOConnection1;
    Active:=true;
    Edit1.text:=fields[1].value;
    end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    with dm.ADOQuery1 do
    begin
    edit;
    fields[1].value:=Edit1.text;
    post;
    end;
    end;
    end.
    merci pr votre aide

  10. #10
    Membre averti Avatar de Bejaia-In
    Inscrit en
    Avril 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 365
    Points : 392
    Points
    392
    Par défaut
    A michel_laure,
    Comme c'est ton premier post sur ce forum, je te souhaite la bienvenu !
    Néanmoins, tu t'est trompé (c'est pas grave !), tu aurais dû ouvrir une nouvelle discussion et non pas répondre à celle-ci.

    Et encore un fois bienvenu du Cameroun.
    ....................................................................
    Aidez-vous... Dieu vous aideras et nous aussi..
    ....................................................................

  11. #11
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Bon en effet c'est pas super grave, mais pour répondre au problème, la ConnectionString est incorrecte, elle devrait être du type :
    'Provider=SQLOLEDB.1;Password=xxx;User ID=xxx;Initial Catalog=xxx;Data Source=xxx'
    Pour former ta première connectionstring correctement, place un objet ADOConnection sur une form, dans l'inspecteur de propriété sélectionne la propriété Connectionstring, puis clique sur les ...
    Un assistant permet de construire la chaîne de connexion et de la tester.
    Bon courage.

Discussions similaires

  1. ado + sql server
    Par bilouchka dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/10/2006, 14h28
  2. ADO + SQL Server + problème de connexion
    Par bchristo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/12/2005, 17h08
  3. [DELPHI 2005] Paramètre ADO, SQL Server et chaîne vide (' ')
    Par danbern dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/08/2005, 15h21
  4. equivalence requete en sql server
    Par voyageur dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/12/2004, 16h08
  5. [ado][sql server] CLIENT/SERVER
    Par nil dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/04/2004, 08h12

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