안넝하세요.
책에 보면 인덱스의 크기가 20 바이트 이상이면 인덱스 효과를 볼수가 없다고 나와있습니다.
제가 설계한 DB에 27바이트 인덱스가 있는데 고민하게 되었읍니다.
왜 20바이트 이상이면 성능을 발휘할수 없다고 하는지 자료를 찿기가 힘드네요.
설명좀 부탁드립니다.
sql2000, sql2008 사용중입니다.
Comment 4
-
버즈베잇
2014.01.29 10:08
-
희망나라
2014.01.29 11:17
답변감사드립니다.
저도 정원혁님이 쓰신 책을 보고 궁금해서 질문드립니다.
예전에는 별 생각없이 DB설계 했었는데 하나하나 알수록 더 고민하게 됩니다.
물론 좋은 거지만... 감사드립니다.
-
맨즈밤
2014.02.03 09:50
20바이트를 기준으로 어떤 다른 현상이 있는건 아닙니다. 클러스터인덱스의 경우 넌클러스터 인덱스에 자동으로 포함되기 때문에 클러스터가 클경우 넌클러스터도 덩달아 커져서 효율이 나빠지게 됩니다. 때문에 되도록 클러스터 인덱스의 사이즈를 작게 하라는 것이구요. 클러스터 인덱스의 활용이 많다면 융통성있게 넉넉히 잡으셔도 될듯합니다. 넌클러스터드의 활용도가 많다면 차라리 클러스터를 identity 값으로 만드는것도 방법이 될수 있습니다.
-
정원혁_307692
2014.02.03 12:38
네, 앞의 답글 올려주신, 특히 맨즈밤 님의 의견이 제 의견과 거의 같습니다!
클러스터가 커지면 덩달아 넌클러스터에 그대로 복사됩니다. 20바이트는 괜찮고 21바이트는 안되고 그런 의미는 아닙니다.
감사합니다.
페이지에 대한 개념을 아신다면 쉽게 이해가 가실 겁니다.
테이블,인덱스 모두 물리적으로는 페이지(8kb)에 저장 됩니다.
한정된 공간의 페이지에 인덱스컬럼이 저장 되는데 그 사이즈가 크다면 한 페이지에 저장되는
인덱스컬럼의 row는 크기가 클수록 적게 저장 됩니다.
그러면 당연히 인덱스 페이지는 많아 지게 되겠죠.
인덱스를 타서 검색 속도가 높아지는 이유는 page read 가 적어 지기 때문인데 인덱스 페이지가
많다면 좋은 성능은 기대하기 힘들겠죠.
특히 클러스터드 인덱스에서는 아주 안좋은 경우가 됩니다.
작년에 정원혁님이 강의를 들었던 적이 있었는데
'20byte 넘어가는 클러스터드 인덱스는 생각 하지도 말아라' 라고 하시더군요...
(dba 가 아닌 개발자 지식수준으로 끄적였습니다...dba분들께서 좀더 자세한 내용의 답글을...)