DB/MSSQL2020. 11. 3. 16:15
728x90

일반적으로 테이블 내의 데이터를 모두 삭제하는 경우 delete 문을 많이 사용한다.

 

DELETE MY_TABLE;

또는

DELETE MY_TABLE

WHERE 컬럼=조건1;

 

일반적으로 where 조건이 꼭 필요한 경우나 데이터 건수가 많지 않은 경우 유용하다.

 

하지만 데이터가 많은 테이블 전체를 삭제하는 경우 delete 문은 속도가 느리고 많은 트렉젝션 로그 및 리소스를 사용하여 불리하다.

이때 사용하는 쿼리가 TRUNCATE TABLE 이다.

 

TRUNCATE TABLE MY_TABLE;

 

TRUNCATE TABLE 문은 트랜젝션 로그를 많이 사용하지 않음으로 쿼리의 실행속도가 매우 빠르고 로그량 증가가 매우 적다.

 

비슷한 예로 DROP TABLE을 사용하기도 하지만 이 경우 DROP 된 테이블을 재 생성해야 하고 index나 기타 테이블 설정사항들도 다시 생성해야 하므로 TRUNCATE TABLE 문이 유리할 때가 많다.

 

 

스케쥴이나 자동화된 쿼리에서 insert 또는 update 속도를 높이기 위하여 index를 제거한 후 update/insert 를 수행하는 경우 쿼리가 끝나면 index를 추가하는 쿼리를 추가해주는 경우가 있는데 이때 index가 제거된 후 다시 생성되지 않으면 다음 실행때 index 제거시 없는 index를 제거 시도 하기 때문에 에러가 발생한다.

 

이 경우에는 drop table을 사용하여 테이블을 삭제 한 후 select into 명령이나 creat table 명령으로 테이블을 재 생성하고 index를 생성하게 되면 해당 에러를 피할 수 있다.

 

 

 

 

 

728x90
Posted by 내맘대로내뜻대로