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 :

Sql Clause IN


Sujet :

Développement SQL Server

  1. #21
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Citation Envoyé par alaks Voir le message
    ...Note : Utilisation de SQL Server 2005
    Effectivement, c'est plutôt SQL Server qui importe dans ce cas...

    alaks : ce que je voulais dire un peu plus haut, c'est simplement que si je devais me taper un écran (client lourd où léger) avec 50k lignes, j'aurais du mal à les exploiter d'un seul coup...
    Si c'est vraiment juste pour visualiser, on pourrait imaginer un système de pagination où tu envoies tes paquets de IN selon le besoin...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  2. #22
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Effectivement, c'est plutôt SQL Server qui importe dans ce cas...
    Oui effectivement j'utilises bien SQL server, mais j'étais parti pour chercher l'equivalent du load init de mysql sous sql server.
    Donc merci pour l'idée Antoun
    Dés demain j'essai avec un bulk insert et je croise les doigts..

    Citation Envoyé par pacmann Voir le message
    alaks : ce que je voulais dire un peu plus haut, c'est simplement que si je devais me taper un écran (client lourd où léger) avec 50k lignes, j'aurais du mal à les exploiter d'un seul coup...
    Si c'est vraiment juste pour visualiser, on pourrait imaginer un système de pagination où tu envoies tes paquets de IN selon le besoin...
    Oui je serai tout à fait d'accord avec toi dans la mesure ou si c'était moi qui contrôlait le client, or c'est pas le cas. Tous ce que je dois faire c'est lors d'un appel à cette fonction de recherche, je dois retourner tous les résultats.

  3. #23
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    désolé, j'étais sur l'idée qu'on faisait du MySQL (ça doit être l'âge).

    Merci à ylarvor d'avoir rétabli et donné l'équivalence !
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #24
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 8
    Points
    8
    Par défaut
    Impressionant le bulk insert, j'ai fait un bulk insert de 5 000 lignes ca a mise 0 secondes (enfin qq millisecondes qd mm); c'est terrible.
    Par contre j'ai pas tester le temps que ça prendrait pour créer un fichier de 5000 lignes.

    Donc ac cette méthode j'ai pu faire une jointure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select idref from maTable A, tableCree B, where A.photoid = B.photoid
    mais je crois qu'il me manque un index ou qq chose parce qu'elle mets 5 secondes. Je vais voir ça un peu plus en détails.

  5. #25
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par alaks Voir le message
    mais je crois qu'il me manque un index ou qq chose parce qu'elle mets 5 secondes. Je vais voir ça un peu plus en détails.
    Sur tableCree.photoID.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  6. #26
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 8
    Points
    8
    Par défaut
    A un moment j'ai révé, mais finalement un peu moins

    J'ai fait un script qui effectue toutes les opérations allant de la création de fichier à la jointure en passant par un bulk voici les résultats pour une liste de valeurs de 47000 :

    * les temps sont en millisecondes enfin je crois

    Temps création fichier : 0.0156
    Temps création table : 0.156
    Temps bulk insert: 1.01 ( en moyenne 0.550)
    Temps création index : 0.260
    Temps jointure : ... 8,9

    Total : 8.921

    Temps du drop : 0.01

    C'est dommage que la jointure prennent autant de temps . (jointure entre un ensemble de 3 000 000 et 47 000 valeurs)

  7. #27
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Tu as bien un index sur maTable.idref ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #28
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Que raconte l'explain plan ?

  9. #29
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 8
    Points
    8
    Par défaut
    je retrouve espoir j'y suis presque

    Pour la jointure j'utilisais un index cluster, je me suis dit que c'etait pas terrible vu la quantité de données. Et le plan d'execution montrait que 100% des op se faisait sur l'index cluster(index scan).
    Alrs j'ai créer un index non cluster sur id et j'ai ajouter idref en colonne incluse (un index bp plus petit que le précedent). La jointure se fait maintenant en 4.76 s, la total des opérations se fait en 5.56s.
    Je suis sûr que ca peut être encore amélioré...

    En tout cas merci pour vos conseils, qui m'ont été très bénéfique.

  10. #30
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Idéalement il ne faudrait que IdRef dans l'index sur votre table principale, dans ce cadre précis, mais d'autres contraintes font que c'est peut-être impossible.

  11. #31
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Idéalement il ne faudrait que IdRef dans l'index sur votre table principale, dans ce cadre précis, mais d'autres contraintes font que c'est peut-être impossible.
    Euh, idRef est la seule colonne dans le select et id la colonne de jointure... je crois que l'index est parfait, non ?

    En tous cas, ça m'intéresserait aussi de voir l'explain plan....

    [EDIT]

    Tiens, je suis peut être complètement à côté de la plaque, mais je testerais bien avec un index sur la TableCree.
    Peut être qu'il provoquerait un merge sort join qui irait plus vite...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  12. #32
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 8
    Points
    8
    Par défaut
    Voici le plan d'execution :

    Nom : planExec.JPG
Affichages : 68
Taille : 10,8 Ko

    Comme vous pourrez le voir, il y a un index sur la table TableCree.

    Outre l'amélioration des perfs, il me restera plus qu'à tester si c'est possible de faire la même chose avec une table temporaire. Parce que mes tests ont portés jusqu'à présent sur une table "normale".

  13. #33
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Compte-tenu que la TableCree va être intégralement parcourue, il ne faut pas l'indexer.

    Mais je ne sais pas si celà va modifier le plan d'exécution ou accélerer la requête.

  14. #34
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Si, ça va changer le plan :
    S'il peut obtenir la donnée de l'index, il envisagera plus facilement le MERGE JOIN, car les données sont triables facilement.

    Sinon, à mon avis, il aura plus de chance de choisir HASH JOIN...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

Discussions similaires

  1. requete SQL clause WHERE avec variable
    Par gabule dans le forum JDBC
    Réponses: 6
    Dernier message: 09/01/2019, 11h04
  2. [Oracle / Sql] clause where avec resultat d'une requete
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 2
    Dernier message: 31/01/2006, 09h37
  3. [SQL] clause Where sur un booléen
    Par mosquitout dans le forum Access
    Réponses: 3
    Dernier message: 21/12/2005, 21h29
  4. pb the requête sql clause UNION
    Par new_wave dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/11/2005, 13h38
  5. [SQL] Clause Having
    Par Lou Pitchoun dans le forum Access
    Réponses: 2
    Dernier message: 20/10/2005, 14h03

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