2010-11-22 4 views
0

내가 SQL Server 2005의 매우 초보자이고 내가 온라인 자습서에서 배우고, 여기에 내 질문의 일부 :는 SQL Server 2005의 초보자 쿼리

1 : XYZ에서 선택 *의 차이이며, 모든 선택은 무엇 * XYZ에서.

2 : Clustered 인덱스의 목적은 [[kknow :-)]까지 테이블을 물리적으로 정렬하여 검색을 쉽게하는 것과 같습니다. 테이블에 클러스터 된 인덱스를 만드는 것보다 테이블에 기본 컬럼이있는 경우를 가정 해 봅시다. 이미 정렬 된 열이 있기 때문입니다.

3 : 왜 우리는 1 개의 Clustered Index + 249 Nonclustered Index = 250 개의 인덱스를 만들 수 있습니까? 1 클러스터 된 인덱스의 요구 사항을 이해합니다. 그러나 왜 249 ?? 왜 249를 넘지 않습니까?

  • 의견이 다릅니다 SELECT DISTINCT에 반대

  • 답변

    0
    1. 차이 SELECT ALL가 기본값입니다. 성능상의 이유로 클러스터 된 인덱스는 작고 안정적이며 독창적이며 단조롭게 증가해야합니다. 기본 키는 안정적이고 고유해야하므로 거기에 분명히 적합합니다. 그러나 클러스터 된 인덱스는 범위 쿼리에 적합합니다. PK에 의해 개별 레코드를 찾는 것은 PK가 클러스터되지 않은 경우 잘 수행 할 수 있으므로 일부 작성자는 PK에 클러스터 된 인덱스를 낭비하지 말 것을 제안합니다.

    2. SQL Server 2008에서는 테이블에 최대 999 개의 NCI를 만들 수 있습니다. 나는 그렇게 생각하지 못했지만 한계가 잠재적으로 "필터링 된 색인"으로 제기되어 많은 사람들에게 실용적인 사례가 될 수 있다고 생각합니다. 인덱스는 데이터 수정 작업에 비용을 추가하지만 여러 위치에서 변경 사항을 전파해야하므로 클러스터되지 않은 비 필터링 된 인덱스의 두 배의 수치를 달성하는 데이터베이스 만 읽기 (예 :보고)하는 경우가 많을 것이라고 생각합니다. 3

    +0

    귀하의 제안에 감사드립니다. 1과 2 점이 명확합니다. 그러나 3 점과 조금 혼동을 느낍니다. 이유는 900 개 또는 1000 개가 아닌 테이블에 999 개의 클러스터되지 않은 색인이있는 이유는 무엇입니까? – Zerotoinfinity

    +0

    @Zerotoinfinite - 대답 할 수있는 유일한 사람들은 SQL Server 개발자입니다! 내부적으로는이 메타 데이터를 저장할 수있는 한정된 공간 만 할당하고 999는 합리적인 한도처럼 들립니다. –

    0

    : 당신은 삽입/ALL 인덱스를 업데이트해야합니다 테이블에서 레코드를 삭제

    매번. 인덱스가 너무 많으면 시간이 오래 걸립니다.

    테이블에 5-6 개 이상의 인덱스가있는 경우 시간이 필요하고 스스로 확인해야한다고 생각합니다.

    +0

    입력 해 주셔서 감사합니다. 그러나 숫자 사이에 혼란 스럽습니다. 왜 겨우 249입니까? 왜 248이나 251이 아니겠습니까? – Zerotoinfinity

    +0

    필자는 테이블에 클러스터 된 인덱스가있는 경우에만 모든 인덱스를 업데이트해야한다고 생각합니다. –