Newsgroup: it.comp.lang.visual-basic
Titolo: MySQL ma quanto è lento/veloce?

Salve, sto cercando di usare MySQL ma mi trovo dinanzi a una quantità di 
dati da aggiornare e se cerco di farlo il pc rimane lì ad elaborare per 
mooooooooolto tempo. Non sono mai riuscito ad aspettare il termine 
dell'operazione perchè non vorrei stare lì tutta la mattinata.
In pratica ho un'anagrafica di 180.000 record e una tabella B con 2500 
record.
Ora, dell'anagrafica dovrei aggiornare il campo Indirizzo linkando le 
due tabelle tramite codice fiscale.
Ho fatto questo:
UPDATE Anagrafica INNER JOIN Supporto ON Anagrafica.CodFis = 
Supporto.CodFis SET Anagrafica.Indirizzo = Supporto.Indirizzo
e qui il pc se ne va per la tangente ed elabora... elabora... elabora...
Ho provato anche col left join e col right join ma niente... ci mette 
sempre molto.
Conoscete un metodo migliore? O devo spezzare il lavoro in tante query 
suddividendo per... uhm... iniziale del cognome (tanto per dirne una)?
-- 
Rivolterò il mondo per trovarlo, e anche se andasse in Indocina uno dei 
nostri starà nascosto in una ciotola di riso pronto a sparargli nel culo.
(Pulp Fiction)

 suddividendo per... uhm... iniziale del cognome (tanto per dirne una)?
Probabilmente non e' un problema puramente di mysql ma di windows e/o
dell'implementazione di mysql per windows
Posso assicurarti che su Linux impiega circa 11 minuti per modificare
una anagrafica di circa 300.000 record con cose dell'altro mondo
(aggiute di campi, link, sostituzione di tutte le occorrenze con altro).
Per fare lo stesso lavoro su MacOsX impiega poco di piu', circa 14
minuti (stessi dati, stesse operazioni di aggiunta campi, modifiche e
join)
Ora crossposto il messaggio su it.comp.os.linux.iniziare dove credo ti
sappiano consigliare qualche prova e qualche settaggio in piu', io ho
provato con db fittizzi e modifiche inventate di sana pianta per avere
un riscontro da fornirti
Ciao
Joram
f.up/ ICOL.iniziare

 sempre molto.
left, right e inner join non sono la stessa cosa!, cosa ti dice che sono
intercambiabili?

 intercambiabili?
Beh LEFT JOIN e RIGHT JOIN credo siano intercambiabili, a seconda di 
dove scrivi le due tabelle... ma INNER JOIN è diverso, perchè prende 
solo i record comuni *contemporaneamente* alle due tabelle (cosa diversa 
da LEFT/RIGHT JOIN, che pigliano comunque una tabella intera e filtrano 
l'altra).


 l'altra).
Aspetta... ho risposto questa cosa perchè ho letto il tuo messaggio in 
modo errato: pensavo avessi scritto che left, right e inner join SONO 
intercambiabili.
Comunque il fatto che abbia provato i tre tipi di join è scaturito da 
questo:
ho fatto prima un Anagrafe LEFT JOIN TabellaB, ottenendo in questo modo 
l'intera tabella Anagrafe (180.000 record quasi) e associando record per 
record i dati della TabellaB ove ci fosse una corrispondenza.
Vista la lentezza però ho pensato "FORSE QUI IL LEFT JOIN POSSO EVITARLO 
DATO CHE ANAGRAFE E' SOSTANZIOSA..." e ho voluto privare Anagrafe RIGHT 
JOIN TabellaB, aprendo così l'intera TabellaB e associando SOLO i record 
di Anagrafe che avessero una corrispondenza, e infatti ho aperto un 
massimo di 25.000 record (TabellaB ha 25.000 record).
Vedendo che la cosa era ancora lenta ho pensato che magari avrei potuto 
aprire con un inner join scartando a priori i record senza 
corrispondenza alcuna fra le due tabelle, contrariamente a quanto fatto 
fino a poco prima, quando *comunque* aprivo interamente una delle due 
tabelle.
Non credo ci fosse nulla di sbagliato in questo ragionamento.


Non credo ci fosse nulla di sbagliato in questo ragionamento.
Hai provato a fare la stessa cosa senza il comando Join e
sostituendolo magari con un WHERE appropriato?
Leggendo la guida mi è sempre venuto il dubbio che non fosse
supportato se nonché dalla versione 5.1 (che è ancora in fase di
sviluppo).
Utilizzando WHERE dovrebbe impiegare di meno in quanto JOIN è un
comando SQL ottimizzato per Access e SQL Server 2000.

 comando SQL ottimizzato per Access e SQL Server 2000.     
Uhm.... devo provarci... anche perchè in questi giorni ho ottenuto delle 
risposte ad un quesito simile e che mi ha portato a far durare una query 
1 secondo e passa contro i 15 minuti che ottenevo prima...
Voglio vedere cosa succede se applico questa tecnica al MySQL (il post è 
del 26/5 e si chiama "VELOCITA' DI INSERT INTO... WHERE NOT IN ...")
Appena riesco a fare la prova posto tutto :D
