Précédent   Forum du club des développeurs et IT Pro > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/09/2011, 18h32   #1
Organon
Invité de passage
 
Inscription : novembre 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 6
Points : 3
Points : 3
Par défaut [Sybase 12.5] Performance Table Temporaire dans SP

Bonjour à toutes et tous,

Venant d'Oracle et MS SQL Server, j'ai depuis peu la charge de développements sur une bdd ASE en 12.5.
J'ai un souci concernant la manière dont ASE fonctionne.

A la base, j'ai 3 SELECT INTO consécutifs puis la création d'une table temporaire et enfin un INSERT dans cette table

Par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
-- partie 1
SELECT A, B, C
INTO #tab1
FROM mytable_1
 
SELECT A, D, E
INTO #tab2
FROM mytable_2
 
SELECT D, F, G
INTO #tab3
FROM mytable_3
 
-- partie 2
CREATE TABLE #Totaux
(...
)
 
INSERT INTO #Totaux
    SELECT A, B, C, E, F+G, etc.
    FROM #tab1, #tab2, #tab3
Si j'exécute la partie 1, cela me prend 1mn et si j'exécute la partie 2 après, la création de la table puis l'insert final prennent 20s.
Cependant si je lance la partie 1 et la partie 2 ensemble, j'attends plus de 10mn.

La solution que j'ai trouvé pour tout lancer d'un coup et d'insérer des GO après chaque commande.

Maintenant mon problème est que je dois réaliser cet enchaînement de commandes dans une procédure stockée... et que je ne peux pas user de GO.

Y'a-t-il d'autres moyens? J'aimerais éviter de passer par des tables permanentes en lieu et place des #tab.

Par avance, merci
Organon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 12h15   #2
Jean.Cri1
Membre éclairé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 210
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 210
Points : 363
Points : 363
Tu peux creer une sous-procedure contenant l'update ( avec un appel with recompile pour que le plan soit recalculé a chaque fois selon l'etat des tables tempo ).
Ou alors executer l'update en sql dynamique :
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 13h18   #3
Yanika_bzh
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 128
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 128
Points : 1 736
Points : 1 736
et ASE n'hurle pas quand vous lancez votre requete

Code :
1
2
3
INSERT INTO #Totaux
    SELECT A, B, C, E, F+G, etc.
    FROM #tab1, #tab2, #tab3
sachant que #tab1 et #tab2 ont un nom de colonne identique, il y a ambiguité ...
La question est : Est il necessaire deja de passer par des tables intermédiaires ? La requete d'insertion ne peut elle pas etre écrite avec vos selections directes a partir de vos tables mytable_1,mytable_2,mytable_3 ?

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 08/09/2011, 16h23   #4
Organon
Invité de passage
 
Inscription : novembre 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 6
Points : 3
Points : 3
Citation:
Envoyé par Yanika_bzh Voir le message
et ASE n'hurle pas quand vous lancez votre requete

Code :
1
2
3
INSERT INTO #Totaux
    SELECT A, B, C, E, F+G, etc.
    FROM #tab1, #tab2, #tab3
sachant que #tab1 et #tab2 ont un nom de colonne identique, il y a ambiguité ...
J'ai volontairement simplifier le code pour ne garder que l'essentiel. Mon sujet concerne plus : l'INSERT dans #Totaux prend un temps monstrueux quand il est exécuté à la suite des tables temporaires dans un même batch et ne prend que 10s quand les tables temporaires ont été crées et remplies dans un batch précédent.

Citation:
Envoyé par Yanika_bzh Voir le message
La question est : Est il necessaire deja de passer par des tables intermédiaires ? La requete d'insertion ne peut elle pas etre écrite avec vos selections directes a partir de vos tables mytable_1,mytable_2,mytable_3 ?

Bon courage
La requête d'insertion pourrait sans doute être écrite à partir des tables _1, _2 et _3 mais la lisibilité en souffrirait grandement sans parler du débogage.

Il n'est pas nécessaire de passer par des tables intermédiaires mais comme elles n'ont à vocation que de servir une fois par mois, le temps de l'exécution de la sp, je souhaitais m'en "débarrasser".
Organon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h26.


 
 
 
 
Partenaires

Hébergement Web