2009-08-29 5 views
1

모든 표에 대해 각 열의 선택성을 찾기 위해 스크립트를 작성했습니다. 100 행 미만이지만 열의 선택도가 50 %를 넘는 테이블의 경우 여기서 선택도 = 고유 값/총 숫자 행색인 작성에 대한 적합성

그래서 이들 열은 색인에 적합합니까? 또는 색인 생성을위한 적격성에 필요한 최소 행 수를 알 수 있습니까?

답변

4

데이터에 대한 '선택도'값을 계산하여 달성하려는 목표를 이해하고 있지만 맹목적으로 적용 할 수는 없습니다.

실제로 '선택성'값이 매우 낮은 특정 검색어의 경우 색인이 여전히 매우 유용합니다. 예 :
수백만 개의 행이있는 '받은 편지함'테이블을 가정하면이 행에는 'Read'부울 필드가 있습니다. 이 경우 행 수에 대한 고유 한 값은 실제로 적습니다. 대부분의 항목을 대부분 읽으면이 필드에 색인이있는 읽지 않은 항목을 찾는 것이 매우 효율적입니다.

색인 만들기 색인은 비용이 부과됩니다. 읽기에 대한 이점을 얻지 만 쓰기 및 디스크 사용료를 지불합니다.

나는 쿼리와 인덱스를 적절하게 프로파일 링 할 것을 권장합니다. sys.dm_db_missing_index_group_stats 및 인덱스 사용량 (또는 누락)에 대한 통찰력을 제공하는 기타 동적 관리 뷰에서 데이터를 볼 수도 있습니다.

2

0 행, 1 행 또는 1 억 개의 행이있는 테이블에 인덱스를 만들 수 있습니다. 모든 열이 동일한 값 또는 고유 한 값을 갖는 색인을 작성할 수 있습니다.

그래서 너 색인을 생성하십시오. 질문은 실제로 이어야합니다.을 작성해야합니다. 인덱스는 다중 값일 수 있으며 실행하는 쿼리에 따라 다르므로 어떤 도구도이를 알려주지 않습니다. 인덱스를 생성하는 것은 성능 튜닝이 쿼리를 사용할 때 또는 미리 사용하여 쿼리를 생성 할 때 수행됩니다.

모든 색인은 업데이트, 삽입 및 삭제를 수행하는 데 필요한 공간과 시간면에서 비용이 든다. 거짓으로 작성하고 싶지 않으므로 직접 작성해야하므로 스크립트의 결과로 열의 값이 얼마나 고유한지 확인할 수 없습니다.

+0

당신이이 게시물을 시작한 방법은 정말 당신이 우리에게 그린 계란과 햄이 될 줄 알았는데. 슬프게도, 나는 틀렸어. 그러나 좋은 조언 - 인덱스를 만들기 전에 RDBMS의 성능 튜닝 기능을 사용해야합니다! – Eric

+0

답장을 보내 주셔서 감사합니다. – Paresh

0

일반적으로 엄청나게 큰 테이블 (1 백만 행 이상)이있는 경우 해당 인덱스를 기반으로하는 WHERE 절이 최대 1-2 개까지의 항목을 선택하는 경우에만 인덱스를 사용해야한다고 말합니다 데이터의 %.

"성별"열이 있고 값의 약 50 %가 "남성"이고 약 50 % "여성"인 경우 SQL Server 및 대부분의 다른 RDBMS 평균적으로 테이블의 절반 이상을 스캔해야하기 때문에이 경우 전체 테이블 스캔을 수행 할 가능성이 가장 높습니다. 따라서 인덱스를 먼저 사용하고 다음을 기준으로 실제 전체 데이터를 검색하여 "우회"하십시오. 그 색인 값은 가치가 없습니다.

고유 키 (고객 번호) 또는 매우 선택적 인 값이 있으면 색인이 우수합니다.인덱스는 비용이 들지 않고 디스크 공간을 소모하고 유지 관리해야하며 SELECT 이외의 모든 작업을 약간 느리게 처리합니다. 따라서 스레드는 신중하게 처리해야합니다. 따라서 이 아닌 모든 것을 맹목적으로 인덱싱하는 것이 가장 좋습니다. 색인이 너무 적 으면 좋지 않지만, 너무 많으면 많을수록 잘못 될 수 있습니다! :-) 아무도 당신의 지표를 바로 얻을 수 있다고 주장한 사람은 아무도 없습니다. :-)

그러나 확실히 도움이됩니다. Kimberly Tripp의 우수한 소스는 blog posts on SQL Server indexing입니다.

마크

관련 문제