2010-04-11 9 views
61

jeśli mam listę identyfikatorów (1, 4,6,7) i tabelę db, które chcę usunąć wszystkie rekordy, gdzie id jest na tej liście, jaki jest najszybszy sposób robienia tego ?delete gdzie id na liście

Odpowiedz

105

Twoje pytanie prawie czary SQL dla tego:

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

Czy ktoś porównał to do pojedynczego usuwania? – jayarjo

+0

@jayarjo: Jakakolwiek różnica byłaby prawdopodobnie znikoma i nie sądzę, aby istniał jakikolwiek powód, by jeden po drugim usunąć i tak byłby bardziej wydajny. –

+0

To miejsce, w którym wydajność może trafić wygodnie. Na przykład mam już funkcje do robienia tego jeden po drugim na miejscu. Ale gdyby istniała szansa na zwiększenie wydajności, mógłbym napisać dodatkowy kod, inaczej prawdopodobnie nie będzie tego wart. – jayarjo

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

poprawną odpowiedzią jest, że prędkość zależy od charakterystyki konkretnego wdrożenia/silnika, którego używasz, i że należy wystrzegać każdy szarlatan, który udaje, że jest w stanie udzielić jednoznacznej odpowiedzi na to pytanie.

Jeśli optymalizator systemu jest tak słaby, że nie widzi możliwości optymalizacji z "WHERE id IN (...)", to wykona skanowanie tabeli, które może być znacznie wolniejsze niż podanie 4 oddzielne polecenia usuwania.

+1

Śmieci. Proszę przytoczyć jeden silnik bazy danych, w którym 4 oddzielne operacje byłyby szybsze. – Blorgbeard

+1

Jeśli optymalizator w twoim systemie jest tak słaby ... powinieneś przełączyć się do innego silnika bazy danych –