Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

6 réponses
Avatar
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

6 réponses

Avatar
Pierre CFI [mvp]
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" a écrit dans le message de 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).

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



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

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

"Joël" a écrit dans le message de 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).

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



Avatar
Joël
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]" a écrit dans le message de
news:
oui, suite, la req union, sans mettre All, shuntera les doublons

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

"Joël" a écrit dans le message de 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).

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







Avatar
Michel_D
Bonjour,

"Joël" a écrit dans le message de 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.

Avatar
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 GARBE
www.joelgarbe.fr
"Michel_D" a écrit dans le message de
news: fqp3o4$9ol$
Bonjour,

"Joël" a écrit dans le message de
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.




Avatar
pbserv
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" wrote:
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" a écrit dans le message denews: fqp3o4$9o__BEGIN_MASK_n#9g02mG7!__...__END_MASK_i?a63jfAD$ rd.francetelecom.fr...



Bonjour,

"Joël" a écrit dans le message de
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 -