#title DELETE를 빠르게 하는 방법 [[TableOfContents]] ==== 개요 ==== 만약 DELETE를 빠르게 하는 방법을 알려줄 것이라고 클릭을 했다면 좀 실망감을 안겨줄 것 같다. 왜냐하면 DELETE를 빠르게 하는 방법은 없기 때문이다. INSERT야 Bulk Insert라는 것이 있지만 DELETE, UPDATE는 빠르게 하는 방법이 없다. OLTP환경에서는 대량의 데이를 삭제하는 것은 큰 부하를 줄 뿐만 아니라 Lock 문제가 동시성에 악영향을 준다. 특히, 넓은 범위의 락이나 락에스컬레이션으로 블록킹을 유발시킬 수 있다. 어쨌든 최소한의 부하로 삭제하는 것이 중요하다. 다행히도 2005버전부터는 DELETE, UPDATE문에 TOP문장을 쓸 수 있다. 그러므로 DELETE를 루프를 돌리면서 작은 부하를 여러번 주어서 삭제할 수 있다. 다음은 그 예다. ==== 예제 ==== {{{ create table #temp ( seq int , dt char(8) ) insert #temp values(1,'20100101') go 1000 insert #temp values(1,'20100102') go 1000 while(1=1) begin delete top(10) a from #temp a where dt <= '20100101' if @@rowcount = 0 break end }}}