2012-02-14 6 views
0

저는 Visual Studio에서 여러 테이블에 대해 2 열의 복합 인덱스를 만들려고합니다. 2 개의 열이 있습니다. UserID는 모든 테이블에 있으며 외부 키 역할을합니다. 다음, 각 테이블은 다음과 같이 ... 같은 전화, 주소 등 개체의 부분을 참조하기 위해 자신의 키가 : 사용자가 1 개 이상의 주소 및 1 개 이상의 휴대폰을 가질 수 복합 색인 : 열의 순서가 sql server/linq에서 sql로 바뀌는가?

TablePhones: 
PhoneID | UserID | PhonePrefix | PhoneNumber | PhoneExtention 

TableAddresses: 
AddressID | UserID | AddressStreet1 | AddressStreet2 | AddressCity... 

번호.

내가 SQL에 LINQ와 얻을 수있는 곳 절 쿼리 객체는 다음과 같이 사용하고 있습니다 : 순간

read queries: 
where x.UserID == TheUserID 

update/delete queries: 
where x.UserID == TheUserID && x.PhoneID = ThePhoneID 

을, 기본 키는 PhoneID 및 AddressID에있는 내가 찾고 있어요 PhoneID/UserID 및 AddressID/UserID에 복합 색인을 작성하십시오. 데이터베이스의 열 순서는 그대로 또는 모든 테이블의 첫 번째 위치에서 UserID를 이동해야합니까?

제안 해 주셔서 감사합니다.

답변

2

표의 열 순서는 중요하지 않습니다. 적어도 SQLServer 용. 중요한 것은 색인 필드가 색인에 나열되어있는 것입니다. 선행 열 [s]에 대한 조건을 가진 쿼리는 인덱스의 이점을 충분히 얻습니다.

기본 키가 클러스터 된 경우 userID에만 색인을 만들 수 있으며 복합 키가 필요하지 않습니다. 어쨌든, 그것은 클러스터 된 키에 대한 참조를 갖습니다.

+0

UserID가 고유하지 않은 경우 어떻게됩니까? 기본 키에 문제가 있습니까? – frenchie

+0

나는 당신이 옳은지 잘 모르겠다. 이미 기본 키가 있다고 가정합니다. – a1ex07

+0

테이블 구조를 재 설계하고 복합 기본 키를 사용하려는 경우 다음 사항을 고려하십시오. 다른 테이블의 이러한 테이블에서 레코드를 참조해야하는 경우 대리자 PK 및 고유 제한 조건을 (userId, PhoneID)와 (UserId, AddressId)가 복합 PK가되는 것 – a1ex07