Ottimizzazione query join tra 2 tabelle di circa 4000 elementi | SQL & MySQL

Topic: Pubblico - Composto da 4 Posts di 2 Utenti.

18 Ottobre, 2011 08:12 #1
cornac
Utente

cornac
Registrato: Oct, 2011
Posts: 2
Offline

Innanzi tutto un saluto al forum.

Riassumo il mio problema, ho da fare un confronto tra due tabelle per ricavare i valori delle tuple che sono state modificate o aggiunte nella tabella pass rispetto alla tabella web ... il problema è che sono tabelle di circa 400 record l'una e la query mi impiega circa 20 secondi ... qualche consiglio?

Grazie a tutti, a seguire la query:

SELECT pass.*, web.id AS webid FROM con_annuario_passaggio_indirizzi AS pass
LEFT JOIN
con_annuario_web_indirizzi AS web ON pass.id_count = web.id_count
WHERE
(pass.id_socio != web.id_socio OR
pass.cod_tipo_ind != web.cod_tipo_ind OR
pass.nome_pubblico != web.nome_pubblico OR
pass.presso != web.presso OR
pass.ca != web.ca OR
pass.indirizzo != web.indirizzo OR
pass.cap != web.cap OR
pass.localit != web.localit OR
pass.pr != web.pr OR
pass.nazione != web.nazione OR
pass.telefono != web.telefono OR
pass.fax != web.fax OR
pass.orario != web.orario OR
pass.e_mail != web.e_mail OR
pass.descrizione != web.descrizione)
OR web.id IS NULL

18 Ottobre, 2011 19:38 #2
g2d
Moderatore

g2d
Registrato: Jul, 2008
Posts: 957
Offline
Segui g2d su Twitter!

400 record sono molto pochi... ma no ho capito bene che vuoi dire... ho visto nella clausola Where molte condizioni in OR, non si riesce a limarle in modo da fargli fare quanti meno confronti possibili?


Un tempo ero algweb ora sono g2d

18 Ottobre, 2011 20:08 #3
cornac
Utente

cornac
Registrato: Oct, 2011
Posts: 2
Offline

Ciao,

ho perso uno zero, sono due tabelle da confrontare di 4000 elementi.

Purtroppo le or non riesco a diminuirle perché devo ricavare tutti i campi in cui almeno uno di quei campi è stato modificato.
Comunque ho risolto facendo aggiungere un campo modificato che viene impostato a 1 se il record nella tabella passaggio è stato aggiornato.

Vado a fare l'update in web di tutti i campi dove pass.modificato = 1 e dopo reimposto tutti i modificato a zero.

Grazie a tutti!!!

Saluti alla prossima

18 Ottobre, 2011 20:43 #4
g2d
Moderatore

g2d
Registrato: Jul, 2008
Posts: 957
Offline
Segui g2d su Twitter!

ehehe direi di si alla grandissima

a presto


Un tempo ero algweb ora sono g2d

Condividi su:

Loggati o Registrati per replicare