[질문] 자주 변경되는 컬럼에 인덱스 0 4 3,454

by 손형선 [2007.10.24 21:49:46]


안녕하세요?

 

요금제 가입 테이블이 있는데요. 만료일이 있거든요. 근대 이 만료일이 계속 재가입하면

업데이트 되는 컬럼입니다.

 

그런데 과금 데몬에서 이 만료일을 where 조건으로 하여 자주 도는데요.

 

DBA 분께서 인덱스 걸라고 하시네요. 그냥 인덱스 rebuild 가끔 해주면 된다고요.

 

업데이트 되는 컬럼은 인덱스를 걸지 않는다 라고 굳게 믿고 있었는데,

 

거는게 맞을까요?

by 현 [2007.10.25 00:00:00]
업데이트가 빈번하게 발생하는 컬럼에는 가급적 인덱스를 안거는게 좋긴 하지만, 꼭 필요하면 걸긴 걸어야죠.
Access 범위를 줄여줄수 있는 조건이 완료일뿐이라면, 혹은 완료일이 가장 좋은 조건이라면 걸어야겠죠.

일단 해당 테이블에 Access 형태를 먼저 분석해 보는게 좋을 듯 합니다.

by sleeper [2007.10.25 00:00:00]
인덱스의 컬럼이 수정 될 경우 불가피하게 삭제, 삽입 작업이 인덱스 내에서 수행이 되니 수정이 자주 일어나는 컬럼은 인덱스로 지정하지 않는 것이 정석인데 범위를 확실하게 줄여줄 수가 있다면 가끔 인덱스를 리빌드 하는 것도 (DBA가 부지런하다면)나쁘지 않은 방법일 것입니다. 그에 앞서 [현]님이 답변하신 것처럼 테이블 access 형태를 종합적으로 분석해서 필요에 따라 인덱스를 수립하는 전략이 필요하겠지요.

by 손형선 [2007.10.25 00:00:00]
답변감사합니다. 그런데 인덱스를 rebuild 할 시점을 어떻게 판단해야하는지요?

by 현 [2007.10.25 00:00:00]
그 시점은 쿼리 하나 돌려보면 알 수 있습니다.

인덱스를 재구축 해야 하는 시점은,
인덱스의 물리적위치(테이블스페이스)를 변경하거나, 삭제된 엔트리를 많이 가지고 있거나, reverse등으로 속성을 바꿀때 하시는건데요, 손형선님의 질문에 의하면 삭제된 엔트리를 많이 가지고 있는 경우에 해당되겠네요.
인덱스 컬럼이 수정되면 데이터와는 달리 인덱스는 수정되는 것이 아니라 삭제되고 다시 생성됩니다.
따라서 그런 데이터가 많아지면 레벨이 깊어지겠지요. (b트리 구조를 아신다면 이해가 빠르실 겁니다.) 그 레벨의 깊이가 너무 깊어지면 rebuild를 하시면 됩니다.
지면이 작아서 설명은 이정도까지만 하고, 부족분은 검색을 통해서 해결하시기를 권합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입