Depuis que j'ai lancé le processus d'insertion de 7M lignes d'une table dans deux autres, je me demande maintenant s'il existe un moyen plus rapide de le faire. Le processus devrait se terminer dans une heure, soit 24 heures de traitement.Insertion plus rapide Table Oracle Hash Cluster
Voilà comment ça se passe:
Les données de ce tableau
RAW (word VARCHAR2(4000), doc VARCHAR2(4000), count NUMBER);
devrait trouver une nouvelle maison dans deux autres tables de cluster T1 et T2
CREATE CLUSTER C1 (word VARCHAR2(4000)) SIZE 200 HASHKEYS 10000000;
CREATE CLUSTER C2 (doc VARCHAR2(4000)) SIZE 200 HASHKEYS 10000000;
T1 (word VARCHAR2(4000), doc VARCHAR2(4000), count NUMBER) CLUSTER C1(word);
T2 (doc VARCHAR2(4000), word VARCHAR2(4000), count NUMBER) CLUSTER C2(doc);
par Java inserts avec manuel Commettre comme ceci
stmtT1 = conn.prepareStatement("insert into T1 values(?,?,?)");
stmtT2 = conn.prepareStatement("insert into T2 values(?,?,?)");
rs = stmt.executeQuery("select word, doc, count from RAW");
conn.setAutoCommit(false);
while (rs.next()) {
word = rs.getString(1);
doc = rs.getString(2);
count = rs.getInt(3);
if (commitCount++==10000) { conn.commit(); commitCount=0; }
stmtT1.setString(1, word);
stmtT1.setString(2, doc);
stmtT1.setInt(3, count);
stmtT2.setString(1, doc);
stmtT2.setString(2, word);
stmtT2.setInt(3,count);
stmtT1.execute();
stmtT2.execute();
}
conn.commit();
Des idées?
hé merci pour vos conseils. J'utilise Java pour surveiller le processus de transfert de données (combien de lignes restantes), un INSERT AS SELECT normal ne me le dit pas. J'accède toujours aux tables de la même manière, comme select * from T1 où word = 'foo'; pour ce que les tables de hachage sont les meilleurs je pense. – chris
Basé sur l'expérience passée avec les bases de données indexées par hachage (Teradata), je ne ferais appel aux clusters de hachage que si vous joignez plusieurs tables sur la même clé - et comme je l'ai remarqué, je ne voyais pas grand intérêt. Pour votre requête, un index B-tree normal est probablement le meilleur. – kdgregory
Si vous utilisez la syntaxe INSERT INTO .. SELECT FROM, vous pouvez utiliser v $ longops pour voir où cela se passe. –