테이블명 A가 있구요
인덱스는 A1컬럼과 B1 컬럼 순서로 걸려 있어요
삭제를 위해서 기본키를 제거하고 인덱스만 남겨두었어요
DELETE A WHERE B1 <'2008'
이렇게 했을경우 삭제 속도가 느린이유가 인덱스를 생성하고 있는 상태이므로 대량 삭제시 굉장히 늦게 지워지는 원인이 될까요?
SELECT 기준으로 봤을땐 A1,B1 순서로 인덱스를 구성해놔서 SELECT B1 A FROM B1 <'2008'로 하면 인덱스를 안타죠?
그런데 DELETE경우에는 인덱스를 타고 안타고를 떠나 물리적으로 삭제되면서 인덱스를 재구성하게 됨으로 삭제 속도가 굉장히 느려지니
처음부터 인덱스를 다 제거하고 나서 DELETE 시키면 빨라지게 되는걸까요?
인덱스 삭제하니 8분만에 지워졌고 안하니 18시간 걸리네요
궁금해서 질문드립니다.
인덱스를 타지 않으나 삭제되면서 물리적으로 인덱스를 내부적으로 재구성하고 또 삭제하고 반복으로 처리속도가 훨씬 느린지가 궁금합니다
적은 양의 데이타를 삭제하는 경우는
Index Seek를 해서 해당 데이타를 삭제하는게 빠르겠죠.
대량의 데이타를 삭제하는 경우는
만약 인덱스가 없다면 테이블을 스켄해서 데이타를 삭제하고 끝이죠 (이 경우 Truncate 추천)
만약 인덱스가 있다면 옵티마이저는 테이블 스켄보다는 인덱스 스켄으로 플랜을 생성할텐데
그러면 Lookup비용이랑 인덱스 갱신 비용까지 더해져서 더 느릴수 있겠네요.