2016. 1. 14. 14:18 IT/MySQL
hwm와 truncate.
high water mark라는 것은 우유를 예를 들어 설명해 보자면...
우리가 컵에다가 우유를 따른 후 빨대로 우유를 다 먹더라도 처음에 우유가 차 있던 표시선이 나타나게 되죠?
그 표시선이 high water mark 입니다.
즉, 어떤 테이블에 데이터를 입력 한 후 delete로 데이터를 모두 지우게 되더라도
테이블의 사이즈는 줄어들지 않고 지우기 전의 사이즈를 그대로 유지하게 됩니다.
이럴때 테이블 풀스캔을 하게 되면 0건을 읽어 오지만 테이블 전체를 읽기 때문에 시간이 오래 걸립니다.
이 high water mark를 없애기 위해서는 몇가지 방법이 있는데 그중에 하나가 truncate 입니다. delete로 전체 데이터를 지우게 되면 이 high water mark가 그대로 유지가 되어 테이블의 용량은 변하지 않지만 truncate로 테이블 데이터를 지우게 되면 high water mark는 테이블의 초기상태로 환원되게 됩니다.
delete시 남아 있는 용량의 경우 나중에 재사용이 되긴 합니다. 단 commit한 데이터에 한해..
참고로 truncate가 delete보다 속도가 빠릅니다.
truncate 는 identity컬럼을 초기화 시킵니다. 이 컬럼의 카운트를 보존해야 한다면 delete를 사용해서 삭제하길 바랍니다.
또, truncate는 로그를 사용하지 않는 명령어. 로그를 남기지 않으므로 아래와 같은 경우에는 사용할 수 없습니다.
- 다른테이블에서 참조되는 경우
- 트리거가 설정되어 있는 경우
- 복제작업(Replication)에 참여하고 있는 경우
- Index View에 참여하고 있는 테이블
'IT > MySQL' 카테고리의 다른 글
mysql table name ibd 형태일 시 파일 의미. (0) | 2016.04.28 |
---|---|
OPTIMIZE TABLE. 테이블 깨졌을 때 조치하는 법. (0) | 2016.01.14 |
mysql Process 조회. (0) | 2016.01.10 |
이전의 INSERT 작업으로부터 생성된 ID를 반환 (0) | 2016.01.07 |
Mysql 전체 날짜 리스트 출력. (0) | 2015.11.25 |