개발 이런저런 야그들

Index는 반드시 이렇게 해야한다.(?)

손병환 2006. 1. 4. 10:29
테이블에 인텍스 설정 후에 오히려 속도가 더 떨어지는
결과가 생겼다. 그 원인을 분석해 보니
날짜의 범위를 검색하는데 그 범위가 너무 큰 경우에는
Non-Clustered Index(NC)를 사용할 경우 속도가 엄청 느리다는 것을
알게 되었고, 그 범위에서 검색되어 지는 데이타의 수도
전체 데이터의 5%~10%정도가 적당하다는 것도 알게 되었다.

그런데 아주 엽기적인 사건은 현재 프로젝트를 담당하고
데이터베이스를 담당하고 있는 리더가
날짜에는 무조건 NC를 사용해야 한다는 것이다.
이전부터 쭉 그렇게 사용을 해 왔다는 것이다.
더 충격적인 사실은 이로인해 인덱스의 크기가 원데이타보다
더 크다는 것이다.(이 경우 엄청난 IO로 인해 이 테이블에
행을 추가, 삭제, 수정을 실행할 경우 서버에 엄청난 부하를
주게되며, 서버가 죽어버리는 경우도 있다.)
나도 첨에는 그렇게 믿어왔고 인덱스를 쓰면 무조건
빠르다고 생각을 했다. 하지만 경우에 따라서는
키를 넣지 않고 테이블을 생성하는 경우도 있다. 빠른 검색
속도와 입출력을 위해서...

반드시 이렇게 해야한다는 것은 상당히 위험한 것이다.
매번 테이블을 생성하고 인덱스를 설정할 때마다
왜 이 테이블에 인덱스를 사용하고 프로그램과 연동해서
어떤 쿼리문이 가장 많이 사용되는지를 생각해서
인덱스를 만들어야 제대로된 속도를 내며 생산성이
높은 프로그램이 나오는 것이다.

지금까지 이렇게 해왔는데요 라는 것은 가장 위험한 생각이며
스스로 무덤을 파는 것이다.

'개발 이런저런 야그들' 카테고리의 다른 글

테스트 사양서  (0) 2006.01.04
테스트 사양서에 대한 새로운 고찰  (0) 2006.01.04
타인이 만든 프로그램의 수정방법  (0) 2006.01.04
관리 기본  (0) 2006.01.04
부끄러운 개발의 자세  (0) 2006.01.04