Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2011, 11h37   #1
Invité de passage
 
Homme Nicolas
Ingénieur développement logiciels
Inscription : août 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France, Vendée (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2011
Messages : 2
Points : 0
Points : 0
Par défaut Problème de lenteur de Requete DB2

Bonjour à tous,
Je viens de commencer à développer sur DB2.
Par contre je travaille sur un serveur Windows 2008 R2 (sous Visual Studio 2010), et la base de données DB2 est installée sur un serveur Windows 2003 R2.
Je vous énonce mon problème.
J'ai une table qui fait 103 champs et ma clé primaire fait 14 champs.
(Oui ce n'est pas très optimisé mais "Ordre du chef de Projet")
Juste une requête "SELECT * FROM <ma_table>" et le temps d'exécution dépasse les 10 secondes.

Merci pour vos infos.
Cordialement,
NB.

Autres infos :
-> la clé formée est un ensemble de champs de type VARCHAR(50).
-> les autres champs sont de type LONG VARCHAR;
JE NE SUIS PAS EN MESURE DE VOUS ENVOYER MA TABLE : Secret Pro.
nikoseag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 17h39   #2
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
votre
Code :
1
2
 
SELECT * FROM maTable
Doit surement vous générer un flux de retour important (Lecture complete de la table + renvoi de toutes les données + affichage dans votre client).

Conseils : Eviter de selectionner toutes vos colonnes (*) si vous le pouvez (Mais bon avec 103 colonnes, je dois bien admettre que ca ne doit pas etre facile), limitez vos résultats par des clauses restrictives, indexez correctement les colonnes.

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 23h26   #3
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
SELECT * sans prédicat ?

Je pense que tu n'as pas besoin ramener toutes les colonnes et toutes les lignes de ta table.

Nommes les colonnes utiles dans le select et rajoute une clause where indexée, ce sera déjà un bon début


[EDIT] duplicate avec @Yannika bzh


.
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 09h09   #4
Invité de passage
 
Homme Nicolas
Ingénieur développement logiciels
Inscription : août 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France, Vendée (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2011
Messages : 2
Points : 0
Points : 0
Je suis obligé de renvoyer toutes mes colonnes.

Dans mon code je les utilise toutes donc ....
Oui c'est une chose barbare mais bon.

J'ai trouvé une solution en laissant ma clé dans une table (avec clé primaire un ID auto-incrémenté) et dans une autre tous mes champs.

C'est beaucoup plus rapide au traitement.

Merci pour vos réponses.
nikoseag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 09h16   #5
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
j'vois pas bien le rapport là oO

Votre volumétrie entre les 2 tables n'as pas changé, et une pk c'est une contrainte d'unicité qui est surement indexée (je ne connais pas assez db2 LUW pour avoir un avis net)....


Bref par contre dans votre table en question, n'avez-vous pas des redondances de données (ceci peut alterer énormément les perfs ...)?

Qu'est-ce qui justifie une clef primaire de 14 colonnes ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 09h19   #6
Nouveau Membre du Club
 
Avatar de rgomes
 
Homme
IT Developer JAVA Senior
Inscription : juin 2004
Messages : 118
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : IT Developer JAVA Senior
Secteur : Service public

Informations forums :
Inscription : juin 2004
Messages : 118
Points : 39
Points : 39
Tu peux peut être essayé de faire un "bulk load" :

1 - 1er filtre
int[] ids = select ID from bigtable where.....

2 - Bulk load
select * from bigtable where id in (...ids...)
rgomes est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h23.


 
 
 
 
Partenaires

Hébergement Web