SQL Server 테이블에 데이터 입력 필드가 있는 경우 이를 효율적으로 인덱싱할 수 있습니까?

SQL Server 테이블에 데이터 입력 필드가 있는 경우 이를 효율적으로 인덱싱할 수 있습니까?

백엔드 SQL Server 데이터베이스가 있습니다. 클러스터형 인덱스가 가장 효율적이지만 효율성을 높이기 위해 물리적으로 페이지 순서를 지정한다는 것이 제가 이해한 바입니다. 따라서 사용자가 입력한 필드인 경우 새 레코드가 추가될 때마다 전체 테이블이 자체적으로 재구성되어야 합니다.

이것은 효율적일 수 없습니다. 그렇다면 이 경우 필드에 일반 인덱스를 배치하는 것이 효율적일까요? 아니면 그냥 색인을 생성하지 않은 채로 두시겠습니까?

답변1

일반적으로 ID 필드에는 클러스터형 인덱스만 사용해야 하며 자동 번호는 계속 증가하므로 가장 좋습니다. ID 열을 업데이트하는 것은 매 천년마다 한 번씩 수행해야 하는 작업이며 확실히 애플리케이션 런타임에는 수행되지 않으므로 표준 DML 문을 통해 페이지 콘텐츠를 다시 정렬할 필요가 없습니다.

이러한 제약 조건 내에서 클러스터형 인덱스는 매우 효율적이지만 지적한 대로 잘못 사용하면 인덱스된 필드의 DML 문의 성능이 크게 저하될 수 있습니다.

간단히 대답하자면, 사용자가 입력한 필드에는 클러스터형 인덱스를 사용하지 마십시오.

비클러스터형 인덱스의 경우 사용법에 따라 큰 이점이 될 수도 있고 경고가 될 수도 있습니다. NCI는 하나 또는 적은 수의 행을 검색하는 데 매우 뛰어나지만 각 필드가 추가될수록 인덱스의 크기가 커지므로 복잡한 다중 필드 인덱스 또는 많은 수의 행에 대한 쿼리만 해결할 수 있는 인덱스 최소한 이득을 제공하지 않으며 종종 가치보다 더 많은 방해를 받습니다.

관련 정보