2012-04-23 6 views
1

검색 필드에 하나의 인덱스를 정의 수스 네 개의 인덱스를 정의 :나는 다음과 같은 열이 직원 테이블이

employeeID (PK) 
First_name 
    Last_name 
    Third_name 
    Age 
    Sex 
    Telephone 
    Dateofbirth 
    Position 

그리고 난 다음 필드 중 하나를 사용하여 직원을 검색 할 수있는 검색 기능을 가지고있다 -

First_name 
Last_name 
Telephone 
Dateofbirth 

그리고 사용자가 이러한 필드의 조합을 지정할 수는 검색에 포함된다.

  1. 네 개의 검색 필드에 별도의 네 개의 인덱스를 생성 -이 :

    지금 내가해야 ,, 인덱스를 만들 수있는 가장 좋은 방법이 무엇인지 검색을 개선하기 위해?

또는

  1. 는 네 개의 열을 함께 포함하는 단일 인덱스를 만들기 위해 더 좋을 것이다?

또는

  1. 세 번째 더 나은 솔루션이있다?

BR

+0

인덱스 . n 개의 맨 왼쪽 열이 사용되는 경우에만 사용할 수 있습니다. 따라서 네 개의 열이있는 하나의 인덱스는 일반적으로 무의미합니다 - ** 네 개의 열 모두를 항상 ** 사용하는 쿼리가 없다면 ... –

답변

2

두 번째 옵션 (전 4 열에 하나 개의 인덱스는) 거의 항상 등 모든 쿼리 두 번째 열을 포함하면 사용자가 항상 하나 개의 열을 포함 것을 알고하지 않으면 도움이 될 가능성이 매우 높다되지 않습니다 인덱스의 첫 번째 열을 보지 않는 인덱스는 최소한 인덱스 검색을 위해 해당 인덱스를 사용하지 않습니다. 이러한 인덱스는 선택 목록에 다른 열이 포함되어 있지 않은 경우 해당 데이터를 검색하는 데 여전히 사용될 수 있습니다.

4 가지 색인이 모두 필요한지 확실하지 않습니다. 이름없이 성을 찾기 위해 검색 할 가능성이 있습니까? 사용자가 얼마나 자주 John을 검색 할 것이라고 생각하십니까? 그 사람들을 스캔하여 단일 색인 (LastName,FirstName)으로 결합하도록 시켰습니다. 생년월일에 대한 검색이 많다면 놀랄 것입니다. 직원들이 직장 동료의 나이/생일을 알 수 있거나 쉽게 찾을 수있는 것이 일반적인 관행입니까?

+0

그래서 검색 필드로 첫 번째 및 마지막 이름 만 포함해야 함을 의미합니다. 이 두 필드에 대한 단일 색인을 정의 하시겠습니까? –

+0

* * 해야할지 모르겠다. 그게 아마 내가 할일이야. –

0

전통적인 색인을 사용하는 이상적인 솔루션은 없습니다. 그것이 어떻게 작동하는지 생각한다면, 인덱스는 실제로 특정 필드에 대해 테이블을 정렬하는 것과 같습니다. 따라서 네 개의 열 모두에 하나의 색인 만있는 경우 실제로는 첫 번째 색인 만 사용할 수 있습니다. 네 개의 인덱스를 사용하면 SQL Server는 각 인덱스를 순차적으로 검색 할 수 있습니다. 와일드 카드 패턴에 대해 검색하는 경우

그러나, 위에서 언급 한 논쟁이다 :

COLUMN LIKE '%searchstring%' 

검색이 index--를 사용할 수는 각 행의 내용을 검색해야합니다.

전체 텍스트 색인을 고려해야한다는 것은 모두 이런 종류의 시나리오를위한 것임을 의미합니다.`(FIRST_NAME, LAST_NAME, 전화, 생년월일 (DateOfBirth)가)`** ** 도움 당신은 혼자가 단지`last_name` 검색하지 않을 경우에

http://msdn.microsoft.com/en-us/library/ms142571.aspx

관련 문제