2010-07-14 11 views
5

Questa è più una questione di teoria.MySQL UPDATE è più veloce di INSERT INTO?

Se sono in esecuzione 50.000 query che inseriscono nuove righe e 50.000 query che aggiornano quelle righe, quale richiederà meno tempo?

+3

Questo dipende da vari fattori. Le tabelle hanno indici? Aggiornerai tutte le colonne in cui inserire l'inserto o solo un suo sottoinsieme? Inoltre, non riesco a vedere la rilevanza di questa domanda. In caso di dubbio, misura per il tuo caso d'uso con i tuoi dati ... –

+0

Suggerirei che poiché INSERT e UPDATE non fanno la stessa cosa, il migliore da usare sarebbe quello che fa ciò che è necessario, e al diavolo con quanto tempo ci vuole Vedere http://c2.com/cgi/wiki?PrematureOptimization –

risposta

4

Inserire sarebbe più veloce perché con l'aggiornamento è necessario prima cercare il record che si sta per aggiornare e quindi eseguire l'aggiornamento.

Anche se questo sembra un confronto valido in quanto non si ha mai la possibilità di inserire o aggiornare in quanto i due soddisfano due esigenze completamente diverse.

MODIFICA: Devo aggiungere che questo è con l'assunto che non ci sono trigger di inserimento o altre situazioni che potrebbero causare potenziali colli di bottiglia.

+3

non completamente vero ... si potrebbe avere una tabella con gli orari dell'ultimo accesso. Potresti aggiornare i record o inserirne di nuovi ogni volta che un utente effettua l'accesso. Anche se un tale comportamento dipenderebbe anche dai tempi di accesso, dai tassi di crescita delle tabelle, ecc. –

+2

Non necessariamente - L'aggiornamento potrebbe essere più veloce a causa di un minor numero di pagine a seconda di cosa il cluster e altri indici sono e una miriade di altri fattori. –

+0

Sono d'accordo sul fatto che ci sono fattori che potrebbero contribuire a questo non è il caso. Ma penso che nella maggior parte degli scenari degli utenti quotidiani non lo sia. Ma potrei sbagliarmi. – spinon

1

Con un inserimento nella stessa tabella, è sempre possibile inserire tutte le righe con una query, il che rende molto più veloce dell'inserimento uno alla volta. Quando si aggiorna, è possibile aggiornare più righe alla volta, ma non è possibile applicarlo a tutte le situazioni di aggiornamento e spesso è necessario eseguire una query di aggiornamento alla volta (quando si aggiorna un ID specifico) - e su un grande tavolo questo è molto lento a dover trovare la riga e quindi aggiornarlo ogni volta. È anche più lento anche se hai indicizzato il tavolo, secondo la mia esperienza.

4
Insert Operation : Create -> Store 

Update Operation : Retrieve -> Modify -> Store 

Inserisci operazione più veloce.

0

Come parte qui, non dimenticare che facendo più inserimenti che aggiornamenti, hai più righe quando arrivi a selezionare, quindi rallenterai l'operazione di lettura.

Quindi la vera domanda diventa: cosa ti interessa di più, un inserto veloce o una lettura veloce. Di nuovo, questo dipende da alcuni fattori - in particolare (e non ancora menzionato) del motore DB, come InnoDB (che ora è standard in PHPMyAdmin per inciso).

Sono d'accordo con tutti gli altri però - c'è troppo da considerare caso per caso e quindi è davvero necessario eseguire i propri test e valutare la situazione da lì in base alle proprie esigenze.