2010-04-11 3 views
61

이 목록에 ID가있는 모든 레코드를 삭제하려는 ID (1, 4,6,7) 및 db 테이블의 목록이있는 경우이 작업을 수행하는 가장 빠른 방법은 무엇입니까? ?delete id가 목록에있는 경우

귀하의 질문은 거의 이것에 대한 SQL 주문

답변

105

:

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

누구든지이 벤치 마크 대 1 대 1 삭제를 벤치마킹 했습니까? – jayarjo

+0

@jayarjo : 어떤 차이라도 상당히 무시할 수있을 것입니다. 그리고 어쨌든 하나 하나의 삭제가 더 효율적 일 것이라고 생각하지 않습니다. –

+0

성능이 편리 할 수도 있습니다. 예를 들어, 이미 하나씩 차례대로 처리하는 기능이 있습니다. 그러나 성능 향상의 기회가 있다면 추가 코드를 작성할 수 있습니다. 그렇지 않으면 아마도 가치가 없을 것입니다. – jayarjo

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

정답은 그 속도가 사용중인 특정 구현/엔진의 특성에 따라, 당신은 조심해야 그 이 질문에 확실한 답을 줄 수있는 척 돌팔이.

시스템의 최적화 프로그램이 매우 열악하여 'WHERE id IN (...)'의 최적화 기회를 발견하지 못하면 테이블 스캔을 수행하며 이는 4를 제공하는 것보다 훨씬 느릴 수 있습니다 별도의 삭제 명령.

+1

쓰레기. 4 개의 개별 삭제가 더 빨라질 수있는 하나의 데이터베이스 엔진을 인용하십시오. – Blorgbeard

+1

시스템의 최적화 프로그램이 너무 열악한 경우 ... 다른 데이터베이스 엔진으로 전환해야합니다 –