출처: http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10205&docId=112633793&qb=bXlzcWwgcGFyaW1heSBrZXksIGluZGV4&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=Rv8QGU5Y7vosssCXMIdssc--218580&sid=UD8f2iwLP1AAAGVVICk



기본과 보조를 떠나서 인덱스라는것은 무엇일까요. 말그대로 색인입니다. 무엇인가를 빠르게 찾기위한 수단으로 보면 되지요. 이걸 데이터베이스 아니 테이블에 적용해보면 테이블에 존재하는 특정레코드를 빠르게 찾기위한 수단이 되는 것입니다. 그럼 어떻게 인덱스를 잡아야 빠르게찾을까요? 그래서 나온게 Primary Key입니다. 동사무소 가셔서 이름 말씀하시면 못찾죠? 그럼 무엇으로 찾나요? 주민등록번호 입니다. 똑같습니다. 테이블에 존재하는 정보들간에 서로를 식별할수 있도록 만든 꼭 주민등록번호 같은 값이 Prmary Key입니다. 그래서 Primary Key를 유니크(Unique) Index Key 라고도 합니다. 이말은 바꿔 말하면 특정 컬럼 혹은 2개이상을 하나의 의미로 묶은 결합컬럼들에 Primary Key를 부여하게 되면 자동으로 Unique속성이 부여된다고 보면됩니다. 더부러 Null(알수없는값,Unkown Value)이면 안될테니 기본 속성에 Not Null이라는 개념이 적용됩니다. 이게 단순한 Primary Key에 개념입니다.

 

아하~ 그럼 빨리 찾겠군요 라고 말씀하시는 분들도 계실겁니다. 근데 문제점은 멀까요? 글쎄요~~~ 생각,고민 되시죠? 아까전에 동사무소 예로 들어볼까요? 한사람씩 찾을 땐 몇명이 오던 순서대로 찿으면 되니 굉장히 평할겁니다. 그럼 이렇게 바꿔보죠 동사무소 말고 시청으로 가보죠. 음,,요센 전자정부 시대라 좀 예가 그런가,, 그래도 예로 들어보죠 연람한 사람이 1000명정도라고 하죠 오늘 찾은 사람들 지역별로 명수가 어떻게 되는지 정리해서 보고해! 라고 위 상관이 부하직원에게 지시했다고 치죠. 아까하곤 틀리죠. 한사람의 인적정보는 연람목적이 요청한 보인에게만 해당되지만 지금 이경우는 그사람이 누군지 머하는지 본적이 어떻고 가족은 어떻게 이런거 다 필요없습니다. 쉽게 말해서 Primary Key로 Unique하게 찾은 정보는 아무 의미 없다는 얘기 겠지요. 1000명이니 다행이지 만약 10만명이라면 그 부하는 밤세도 힘들겁니다. 그런데 어떤 선배가 조언을 해주는 겁니다. 힘들지 앞으로 이런 일들이 많이 있을테니까 색인을 정리하되 지역별 연령별로 따로 색인을 준비해서 만들어놔. 그래서 그 부하는 몇일을 고생해서 멸도의 목록은 준비하고 정리해 놓았습니다.

그다음은 어떤 일이 발생했을까요. 지역별이면 색인목록 맨마지막 번호만 확인하면 바로 끝이겠죠?

 

바로 그럼 별도로 만든 색인 목록이 보조 인덱스입니다. 유니크 할필요도 없고 Not Null일필요도 없겠죠. 단순하게 업무에 맞게 필요시 필요한 목록을 만들면 됩니다. 무엇때문 Primary Key의 단점때문이겠지요? Unique하다는 단점. 더 많은 차이점이 있습니다. 이건 튜닝이나 데이터베이스 관리적인(DBA) 관점에서도 접근을해야하는데 지금 요청하는 내용과는 크게 상관이 없는듯합니다.

 

만약 보조 인덱스를 어떻게 활용하면 좋을까요? 라든가 사용시에 처리방식이라든지.. 테이블 관리시 방식등 좀더 실체적이고 구체적인 내용이라면 거의 정보처리 및 관리 수준의 논문이 될듯합니다. 저도 이것때문에 지금 노하우라는 집필 컬럼을 작성하고 있고요. DB에서 굉장히 중요한 부분이기 때문이죠.

 

Posted by halloRa
,