2013-03-27 1 views
0

나는 다음과 같습니다SQL Server가있는 테이블에서 FK 필드에 인덱스를 갖는 가장 좋은 방법은 무엇입니까?

 CREATE TABLE Topic (
      [TopicId] INT IDENTITY (1, 1) NOT NULL, 
      [TopicSeq] INT NOT NULL, 
      [SubjectId] INT NOT NULL, 
      [Name] NVARCHAR (50) Not NULL, 
      [Version] rowversion, 
      [ModifiedDate] [datetime] NOT NULL, 
      CONSTRAINT [PK_Topic] PRIMARY KEY CLUSTERED ([TopicId] ASC) 
     )"; 

나는이 시간이 오래 걸릴 것이라는 주제에 대한 모든 주제를 찾을 필요가 있다면 나는 생각하고있다. SubjectID에 대한 색인을 추가하면 모든 검색어가 자동으로 향상되고 내가 추가 할 수있는 가장 좋은 종류의 색인은 무엇입니까?

+0

실제로 성능 문제가 발생할 때까지는 인덱스를 추가하지 않아도됩니다. 그러나 예, SubjectID에 대한 색인은 특정 검색어의 속도를 자동으로 높입니다. – Blorgbeard

+0

그러나 인덱스를 추가하려면 추가 할 수있는 다른 종류가 있습니까? 또한 EF를 사용하면 EF 쿼리가 인덱스를 사용합니까? – Melina

+0

귀하의 질문에 따라 다르며, 귀하의 질문이 없으면 귀하를 도와 드릴 수 없습니다. –

답변

1

SubjectID의 색인은 상당히 저렴합니다. UNIQUE 인덱스는 원하지 않으므로 CLUSTERED 또는 UNCLUSTERED 중 하나입니다. 난 비 고유 값이 많이있을지라도 색인이 매우 넓기 때문에 (32 비트) CLUSTERED로 갈 것입니다.

+0

조언 해 주셔서 감사합니다. - 클러스터 된 것과 클러스터되지 않은 것의 차이점은 무엇입니까? SQL DDL을 어떻게 코딩합니까? – Melina

+0

@ Melina http://stackoverflow.com/questions/5070529/difference-between-clustered-and-nonclustered-index – Gibron

+0

죄송합니다. 테이블 당 하나의 클러스터 된 인덱스 만 가질 수 있습니다. 디스크의 데이터 정렬 순서를 정의하고 주제 ID에 대한 클러스터 된 색인을 가지고 있기 때문입니다. 그래서 인덱스는 클러스터되지 않아야합니다. 인덱스가 SubjectId 순으로 검색되므로 subjectId를 통해 TopicID를 찾는 것이 빠르기 때문에 검색 속도가 빨라집니다. 비 제휴 인덱스 만들기 Topic_SubjectId_IX 주제 (SubjectId) 그럴 필요가 있습니다. –

관련 문제