2010-04-11 15 views
61

se ho una lista di Id (1, 4,6,7) e una tabella db che voglio cancellare tutti i record in cui l'id è in questa lista, qual è il modo più veloce per farlo ?cancella dove id nella lista

risposta

105

La tua domanda quasi segna la SQL per questo:

DELETE FROM table WHERE id IN (1, 4, 6, 7) 
+0

Qualcuno ha messo a confronto questa cancellazione vs una per una? – jayarjo

+0

@jayarjo: Qualsiasi differenza sarebbe probabilmente trascurabile, e non credo ci sia alcuna ragione per cui l'eliminazione one-by-one sarebbe comunque più efficiente. –

+0

È proprio il momento in cui le prestazioni possono colpire la praticità. Ad esempio, ho già le funzioni per farlo uno per uno sul posto. Ma se ci fosse una possibilità di aumentare le prestazioni potrei scrivere qualche codice addizionale, altrimenti probabilmente non ne vale la pena. – jayarjo

10
delete from t 
where id in (1, 4, 6, 7) 
-5

La risposta corretta è che la velocità dipende dalle caratteristiche della particolare implementazione/motore che si sta utilizzando, e che si dovrebbe stare attenti qualsiasi ciarlatano che finge di essere in grado di dare una risposta definitiva a questa domanda.

Se l'ottimizzatore del sistema è così povero da non individuare l'opportunità di ottimizzazione da "WHERE id IN (...)", verrà eseguita una scansione della tabella, che potrebbe essere molto più lenta di quella di 4 comandi di cancellazione separati.

+1

Spazzatura. Si prega di citare un motore di database in cui 4 eliminazioni separate sarebbero più veloci. – Blorgbeard

+1

Se l'ottimizzatore nel tuo sistema è così scarso ... dovresti passare a un altro motore di database –