OVH Cloud OVH Cloud

Executer 5000 insertion en base de donnée SQL Server

4 réponses
Avatar
BBComp
Bonjour à tous,
J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque
fois lance une insertion en base. (insert into...)
C'est très long ...
Avez-vous un moyen d'executer les 5000 insert d'un coup ?
Peux on "integrer" un datatable dans une table de la base si ces 2 ont la
même structure ?
Ou peux être une autre suggestion ?

Merci d'avance.
Benji

4 réponses

Avatar
Laurent
Salut,

Je te conseille vivement d'exécuter une procédure stockée qui se chargera
d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler
laborieuse au début (ex:gestion des curseur...) mais les performances sont
incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui
passe de plusieurs minutes à moins d'une seconde.

D'une manière générale, je te conseille de toujours utiliser des procédures
stockées, même pour les requêtes les plus simple...

Bon courage !




"BBComp" a écrit dans le message de news:

Bonjour à tous,
J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque
fois lance une insertion en base. (insert into...)
C'est très long ...
Avez-vous un moyen d'executer les 5000 insert d'un coup ?
Peux on "integrer" un datatable dans une table de la base si ces 2 ont la
même structure ?
Ou peux être une autre suggestion ?

Merci d'avance.
Benji


Avatar
TOny
En aspx avec le pilote client sql server, j'effectue de très nombreux insert
(environ 6000) et cela va assez vite (quelques secondes).
Seulement j'ai dû optimiser mon code car j'avais trop de traitement dans ma
boucle.

AVANT :
select table1
while not table1.eof

if then
end if

select table3
if table3.... then
else
end if

../..

insert table2

table1.next
end while


APRES :
select table1
while not table1.eof
insert table2
table1.next
end while

if then
else
end if
update table2
update table2

Tout ça pour dire que pour ma part l'insert d'un select (assez complexe)
vers une table s'effectue rapidement (environ 20 fois plus vite qu'en asp
classique sous ADOBD)

Tony


"Laurent" a écrit dans le message de news:

Salut,

Je te conseille vivement d'exécuter une procédure stockée qui se chargera
d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler
laborieuse au début (ex:gestion des curseur...) mais les performances sont
incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui
passe de plusieurs minutes à moins d'une seconde.

D'une manière générale, je te conseille de toujours utiliser des
procédures
stockées, même pour les requêtes les plus simple...

Bon courage !




"BBComp" a écrit dans le message de
news:

Bonjour à tous,
J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a
chaque
fois lance une insertion en base. (insert into...)
C'est très long ...
Avez-vous un moyen d'executer les 5000 insert d'un coup ?
Peux on "integrer" un datatable dans une table de la base si ces 2 ont la
même structure ?
Ou peux être une autre suggestion ?

Merci d'avance.
Benji






Avatar
BBComp
Bonjour,
J'ai quand même un soucis avec les proc stockées.
Mes insert ne sont pas tous dans la même table.
Je passe donc en parametre @nomTable
Et je fait mon insert : insert into @nomTable
Je declare donc un varchar qui contient ma requete et j'execute à l'aide de :
Exec @str

La procedure stockée ne me fait donc pas gagner de temps ...

Ai-je mal construit ma procedure ?
Y-a-t-il un autre moyen d'aller plus vite ?

Merci d'avance.
BBComp

"Laurent" a écrit :

Salut,

Je te conseille vivement d'exécuter une procédure stockée qui se chargera
d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler
laborieuse au début (ex:gestion des curseur...) mais les performances sont
incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui
passe de plusieurs minutes à moins d'une seconde.

D'une manière générale, je te conseille de toujours utiliser des procédures
stockées, même pour les requêtes les plus simple...

Bon courage !




"BBComp" a écrit dans le message de news:

> Bonjour à tous,
> J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque
> fois lance une insertion en base. (insert into...)
> C'est très long ...
> Avez-vous un moyen d'executer les 5000 insert d'un coup ?
> Peux on "integrer" un datatable dans une table de la base si ces 2 ont la
> même structure ?
> Ou peux être une autre suggestion ?
>
> Merci d'avance.
> Benji





Avatar
Paul Bacelar
Les procédures stockée sont là pour faire gagner du temps d'exécutions mais
aussi pour permettre une abstraction de la base, c'est à dire de pouvoir
changer le schéma de la base sans impacter le code de la couche business.

En ayant comme paramètre de votre procédure stockée le nom d'une table, vous
contrevenez à tous les fondements de l'utilisation de celles-ci.

Si vous avez un nombre conséquents de procédures stockées avec un code très
proche, je vous conseil de développer un petit logiciel qui générera les
scripts SQL de créations de ses procédures stockées et que vous appliquerez
sur votre base lors de son installation pour avoir un ensemble de procédures
stockées exhaustif et performant.
--
Paul Bacelar



"BBComp" wrote in message
news:
Bonjour,
J'ai quand même un soucis avec les proc stockées.
Mes insert ne sont pas tous dans la même table.
Je passe donc en parametre @nomTable
Et je fait mon insert : insert into @nomTable
Je declare donc un varchar qui contient ma requete et j'execute à l'aide


de :
Exec @str

La procedure stockée ne me fait donc pas gagner de temps ...

Ai-je mal construit ma procedure ?
Y-a-t-il un autre moyen d'aller plus vite ?

Merci d'avance.
BBComp

"Laurent" a écrit :

> Salut,
>
> Je te conseille vivement d'exécuter une procédure stockée qui se


chargera
> d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler
> laborieuse au début (ex:gestion des curseur...) mais les performances


sont
> incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui
> passe de plusieurs minutes à moins d'une seconde.
>
> D'une manière générale, je te conseille de toujours utiliser des


procédures
> stockées, même pour les requêtes les plus simple...
>
> Bon courage !
>
>
>
>
> "BBComp" a écrit dans le message de


news:
>
> > Bonjour à tous,
> > J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a


chaque
> > fois lance une insertion en base. (insert into...)
> > C'est très long ...
> > Avez-vous un moyen d'executer les 5000 insert d'un coup ?
> > Peux on "integrer" un datatable dans une table de la base si ces 2 ont


la
> > même structure ?
> > Ou peux être une autre suggestion ?
> >
> > Merci d'avance.
> > Benji
>
>
>