Temps d'exécution sur requête...

Le
Joël
Bonjour tout le monde !

Voici un extrait de procédure :

sql = "SELECT * "
sql = sql & "FROM Batches1 "
sql = sql & "WHERE (((Batches1.[Batch Number]) Not In (SELECT [Batch
Number] from [Batches])));"

Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)

La table "Batches1" contient quelques 4000 enregistrements
La table "Batches" en contient au moins 10 fois plus

Les tables ont la même structure et contiennent 220 champs (et oui, c'est
beaucoup, mais nécessaire).

Le but est d'ajouter dans la tables "Batches" les enregistrments se trouvant
dans "Batches1" mais pas dans "Batches",
la clé étant "Batch Number"

J'ai essayé avec un "INSERT", et le temps étant très long, j'ai essayé
d'abord de tester s'il y avait des enregistrements à ajouter (avec un test
derrière ces lignes genre rs.recordcount etc pour les ajouter une par
une)

Mais cette dernière ligne
Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)
met 10 bonnes minutes à s'exécuter.

Y a-t-il un moyen de faire plus vite ?

Vous en remerciant par avance,
--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre CFI [mvp]
Le #6348121
bonjour
je pense (j'ai pas fait de chrono) que ce serait plus rapide de faire une
req de non concordance entre tes tables ou une req UNION, puis de l'utiliser
pour ouvrir un recordset, si besoin de recorset

--
Pierre SALAUN
MVP Access
*******************************************************

"Joël" 47d008f8$0$890$
Bonjour tout le monde !

Voici un extrait de procédure :

sql = "SELECT * "
sql = sql & "FROM Batches1 "
sql = sql & "WHERE (((Batches1.[Batch Number]) Not In (SELECT
[Batch Number] from [Batches])));"

Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)

La table "Batches1" contient quelques 4000 enregistrements
La table "Batches" en contient au moins 10 fois plus

Les tables ont la même structure et contiennent 220 champs (et oui, c'est
beaucoup, mais nécessaire).

Le but est d'ajouter dans la tables "Batches" les enregistrments se
trouvant dans "Batches1" mais pas dans "Batches",
la clé étant "Batch Number"

J'ai essayé avec un "INSERT", et le temps étant très long, j'ai essayé
d'abord de tester s'il y avait des enregistrements à ajouter (avec un test
derrière ces lignes genre rs.recordcount etc... pour les ajouter une par
une)

Mais cette dernière ligne
Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)
met 10 bonnes minutes à s'exécuter.

Y a-t-il un moyen de faire plus vite ?

Vous en remerciant par avance,
--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr



Pierre CFI [mvp]
Le #6348111
oui, suite, la req union, sans mettre All, shuntera les doublons

--
Pierre SALAUN
MVP Access
*******************************************************

"Joël" 47d008f8$0$890$
Bonjour tout le monde !

Voici un extrait de procédure :

sql = "SELECT * "
sql = sql & "FROM Batches1 "
sql = sql & "WHERE (((Batches1.[Batch Number]) Not In (SELECT
[Batch Number] from [Batches])));"

Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)

La table "Batches1" contient quelques 4000 enregistrements
La table "Batches" en contient au moins 10 fois plus

Les tables ont la même structure et contiennent 220 champs (et oui, c'est
beaucoup, mais nécessaire).

Le but est d'ajouter dans la tables "Batches" les enregistrments se
trouvant dans "Batches1" mais pas dans "Batches",
la clé étant "Batch Number"

J'ai essayé avec un "INSERT", et le temps étant très long, j'ai essayé
d'abord de tester s'il y avait des enregistrements à ajouter (avec un test
derrière ces lignes genre rs.recordcount etc... pour les ajouter une par
une)

Mais cette dernière ligne
Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)
met 10 bonnes minutes à s'exécuter.

Y a-t-il un moyen de faire plus vite ?

Vous en remerciant par avance,
--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr



Joël
Le #6348091
Merci Pierre je vais tester cela.

L'autre solution que j'envisageais (que j'ai testée avec succès) était de
prendre les enregistrements de la table "Batches1", regarder si le
"Batch Number" existe dans la table Batches, si non, ajouter
l'enregistrement testé dans la table "Batches".

Pas très esthétique, mais efficace semble-t-il.

Je vais voir côté Union.

Encore merci

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Pierre CFI [mvp]" news:
oui, suite, la req union, sans mettre All, shuntera les doublons

--
Pierre SALAUN
MVP Access
*******************************************************

"Joël" 47d008f8$0$890$
Bonjour tout le monde !

Voici un extrait de procédure :

sql = "SELECT * "
sql = sql & "FROM Batches1 "
sql = sql & "WHERE (((Batches1.[Batch Number]) Not In (SELECT
[Batch Number] from [Batches])));"

Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)

La table "Batches1" contient quelques 4000 enregistrements
La table "Batches" en contient au moins 10 fois plus

Les tables ont la même structure et contiennent 220 champs (et oui, c'est
beaucoup, mais nécessaire).

Le but est d'ajouter dans la tables "Batches" les enregistrments se
trouvant dans "Batches1" mais pas dans "Batches",
la clé étant "Batch Number"

J'ai essayé avec un "INSERT", et le temps étant très long, j'ai essayé
d'abord de tester s'il y avait des enregistrements à ajouter (avec un
test derrière ces lignes genre rs.recordcount etc... pour les ajouter une
par une)

Mais cette dernière ligne
Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)
met 10 bonnes minutes à s'exécuter.

Y a-t-il un moyen de faire plus vite ?

Vous en remerciant par avance,
--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr







Michel_D
Le #6348081
Bonjour,

"Joël"
Bonjour tout le monde !

Voici un extrait de procédure :

sql = "SELECT * "
sql = sql & "FROM Batches1 "
sql = sql & "WHERE (((Batches1.[Batch Number]) Not In (SELECT [Batch
Number] from [Batches])));"

Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)

La table "Batches1" contient quelques 4000 enregistrements
La table "Batches" en contient au moins 10 fois plus

Les tables ont la même structure et contiennent 220 champs (et oui, c'est
beaucoup, mais nécessaire).



Hum, je pense que le problème de conception ne doit pas être loin,
sinon généralement sur une base bien conçu il suffit de vérifier le bon
positionnement des index.


Le but est d'ajouter dans la tables "Batches" les enregistrments se trouvant
dans "Batches1" mais pas dans "Batches",
la clé étant "Batch Number"

J'ai essayé avec un "INSERT", et le temps étant très long, j'ai essayé
d'abord de tester s'il y avait des enregistrements à ajouter (avec un test
derrière ces lignes genre rs.recordcount etc... pour les ajouter une par
une)

Mais cette dernière ligne
Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)
met 10 bonnes minutes à s'exécuter.

Y a-t-il un moyen de faire plus vite ?


Je dirais revoir la conception de la base, mais c'est apparemment une
option que tu as déjà écartée.

Joël
Le #6348061
Merci Michel

Effectivement, c'est une option que j'ai écartée.

Pour information, la tables "Batches1" provient d'un autre base de données
qu'il est nécessaire de consolider dans la principale.

Encore merci pour le temps passé,
--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Michel_D" news: fqp3o4$9ol$
Bonjour,

"Joël" news:47d008f8$0$890$
Bonjour tout le monde !

Voici un extrait de procédure :

sql = "SELECT * "
sql = sql & "FROM Batches1 "
sql = sql & "WHERE (((Batches1.[Batch Number]) Not In (SELECT
[Batch
Number] from [Batches])));"

Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)

La table "Batches1" contient quelques 4000 enregistrements
La table "Batches" en contient au moins 10 fois plus

Les tables ont la même structure et contiennent 220 champs (et oui, c'est
beaucoup, mais nécessaire).



Hum, je pense que le problème de conception ne doit pas être loin,
sinon généralement sur une base bien conçu il suffit de vérifier le bon
positionnement des index.


Le but est d'ajouter dans la tables "Batches" les enregistrments se
trouvant
dans "Batches1" mais pas dans "Batches",
la clé étant "Batch Number"

J'ai essayé avec un "INSERT", et le temps étant très long, j'ai essayé
d'abord de tester s'il y avait des enregistrements à ajouter (avec un
test
derrière ces lignes genre rs.recordcount etc... pour les ajouter une par
une)

Mais cette dernière ligne
Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)
met 10 bonnes minutes à s'exécuter.

Y a-t-il un moyen de faire plus vite ?


Je dirais revoir la conception de la base, mais c'est apparemment une
option que tu as déjà écartée.




pbserv
Le #6346801
Bonjour,

une solution probablement plus rapide :
SELECT * FROM Batches1 Left Join Batches On Batches1.[Batch
Number]ºtches.[Batch Number]
WHERE Batches.[Batch Number] Is Null

Vérifier aussi que les 2 colonnes [Batch Number] sont indexées et Sans
doublons si possible (ou clefs primaires).

Philippe

On 6 mar, 17:56, "Joël"
Merci Michel

Effectivement, c'est une option que j'ai écartée.

Pour information, la tables "Batches1" provient d'un autre base de donné es
qu'il est nécessaire de consolider dans la principale.

Encore merci pour le temps passé,
--

Bien cordialement,

Joël GARBEwww.joelgarbe.fr
"Michel_D"


Bonjour,

"Joël" news:47d008f8$0$890$
Bonjour tout le monde !

Voici un extrait de procédure :

        sql = "SELECT * "
        sql = sql & "FROM Batches1 "
        sql = sql & "WHERE (((Batches1.[Batch Number]) Not In (SELECT
[Batch
Number] from  [Batches])));"

        Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)

La table "Batches1" contient quelques 4000 enregistrements
La table "Batches" en contient au moins 10 fois plus

Les tables ont la même structure et contiennent 220 champs (et oui, c 'est
beaucoup, mais nécessaire).


Hum, je pense que le problème de conception ne doit pas être loin,
sinon généralement sur une base bien conçu il suffit de vérifier le bon
positionnement des index.

Le but est d'ajouter dans la tables "Batches" les enregistrments se
trouvant
dans "Batches1" mais pas dans "Batches",
la clé étant "Batch Number"

J'ai essayé avec un "INSERT", et le temps étant très long, j'ai e ssayé
d'abord de tester s'il y avait des enregistrements à ajouter (avec un
test
derrière ces lignes genre rs.recordcount etc... pour les ajouter une par
une)

Mais cette dernière ligne
Set Rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset)
met 10 bonnes minutes à s'exécuter.

Y a-t-il un moyen de faire plus vite ?


Je dirais revoir la conception de la base, mais c'est apparemment une
option que tu as déjà écartée.- Masquer le texte des messages pr écédents -


- Afficher le texte des messages précédents -




Publicité
Poster une réponse
Anonyme