|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
[SQL] Query Delete su tabella Access di 500k record che si blocca. Avete soluzioni?
Ciao a tutti,
Sto impazzendo perchè non riesco a far eseguire una query Delete su una tabella Access di circa 5 milioni di record. Ho provato anche a splittare la tabella in più tabelle da 500k record ognuna, ma non sono riuscito a risolvere il problema. Sia T1 la tabella da cui devo cancellare i record. A e B sono i campi di T1, la cui concatenazione può essere o non nel campo C della tabella T2 (ha solo il campo C). Se la concatenazione di A e B non è presente nel campo C, cancello il record da T1. La query utilizzata è la seguente: DELETE * FROM T1 WHERE A&B NOT IN (SELECT * FROM T2) Una volta che la lancio (sia nella tabella da 5 milioni di record che in quelle da 500k), sembra come se la query non facesse nulla. Ho provato anche ad attendere 20/30 min ma è come se non girasse. Ho un PC con processore i5-2520M dual core 2,50ghz e 6gb di RAM. Avete qualche consiglio da darmi? Soluzioni? Grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Se ho ben capito anche T2 ha molti record.
Non conosco benissimo access, ma in genere la IN è poco performante perché viene eseguita su dati non indicizzati, se poi questi dati vengono da una select è ancora peggio perché non conoscendo i valori a priori l'engine non è in grado di eseguire ottimizzazioni. Prima di tutto assicurati di creare un indice su T2.C. Poi sostituisci la NOT IN con una cosa tipo: Codice:
NOT EXISTS (SELECT 1 FROM T2 WHERE T2.C = T1.A&T2.B) |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jan 2005
Messaggi: 395
|
Quote:
Se la query non fa nulla vuol dire che è in corso una full table scan. E lo vedi tranquillamente con il task manager verificando l'I/O su disco. Ma su questa tabella ci sono indici ? I dati che vuoi cancellare quanti sono in percentuale sul totale ? |
|
|
|
|
|
|
#4 | ||
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
Quote:
Dato che è un Access creato da altri colleghi, ho appena verificato e non c'erano indici. Ora ho indicizzato sia il campo A (che può contenere duplicati), sia il campo C (non contiene duplicati). Proverò anche ad utilizzare la NOT EXIST. Quote:
Già avevo controllato il task manager, ma anche li era completamente 'fermo'. L'utilizzo della RAM non aumentava e idem per la CPU. |
||
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
Ragazzi, è andataaaa!
Ci ha messo una decina di minuti, ma quando mi è comparsa la popup per confermarmi che non avrei potuto fare l'undo mi sono emozionato! Grazie mille |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jan 2005
Messaggi: 395
|
Quote:
Sul task manager in questi casi devi vedere l'I/O su disco, non la cpu e la ram. Ciao |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:36.




















