일반적으로 테이블 내의 데이터를 모두 삭제하는 경우 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를 생성하게 되면 해당 에러를 피할 수 있다.
'DB > MSSQL' 카테고리의 다른 글
mssql 에서 merge문사용(insert + update) (2) | 2020.11.18 |
---|---|
MS-SQL 로그정리 및 크기 축소 (3) | 2020.11.04 |
select into 와 insert into from 사용 (0) | 2020.11.03 |
over 절 count 또는 row_number()문과 함께 사용 (0) | 2020.11.02 |
offset fetch 페이징 구현등에 사용하는 쿼리 (0) | 2020.11.02 |