나는이 SQL 서버 2014 표를 그 다음과 같습니다 :
OrderId int not null IDENTITY --this is the primary key column
OrderDate datetime2 not null
CustomerId int not null
Description nvarchar(255) null
우리 팀의 일부 사람들은 클러스터 된 인덱스가 on이어야한다고 제안 OrderId
했지만 다음과 같은 이유로 CustomerId
+ OrderId
가 더 나은 선택 이라고 생각합니다 .
- 거의 모든 쿼리를 찾는 것
WHERE CustomerId = @param
,하지OrderId
CustomerId
는Customer
테이블에 대한 외래 키 이므로 클러스터형 인덱스를 사용CustomerId
하면 조인 속도가 빨라집니다.- 하지만
CustomerId
고유하지 않습니다, 추가적인 가진OrderId
인덱스에 지정된 열은 (우리가 사용할 수있는 고유성을 보장합니다UNIQUE
그 2 열에 클러스터 된 인덱스를 만들 때 고유성을 가지고 있지의 오버 헤드를 피하기 위해, 키워드) - 데이터가 삽입되면
CustomerId
and가OrderId
변경되지 않으므로이 행은 초기 쓰기 후에 움직이지 않습니다. - 데이터 액세스는 기본적으로 모든 열을 요청하는 ORM을 통해 이루어 지므로, 기반 쿼리가
CustomerId
들어 오면 클러스터 된 인덱스는 추가 작업없이 모든 열을 제공 할 수 있습니다.
CustomerId
및 OrderId
접근 방식이 위의 최상의 옵션처럼 들립니까 ? 또는 OrderId
독창성을 보장하는 단일 열이기 때문에 자체적으로 더 나은가요?
현재 테이블에는 클러스터 된 인덱스가 있고 클러스터 OrderId
되지 않은 인덱스는 있습니다 CustomerId
. 그러나 다루지 않으므로 ORM을 사용하고 있고 모든 열이 요청되었으므로이를 검색하는 추가 작업이 필요합니다. 이 게시물을 통해 더 나은 CI로 성능을 개선하려고합니다.
DB의 활동은 약 85 % 읽기 및 15 % 쓰기입니다.