나는이 질문에 대한 답을 이미 알고 있지만 주제에 대해 더 많이 다루어야 할 것처럼 항상 느낍니다.
내 기본 이해는 일반적으로 말하면 주어진 시간에 쿼리 / 정렬 할 수있는 모든 필드를 포함하는 단일 인덱스는 유용하지 않을 가능성이 있지만이 유형의 것을 보았습니다. "누구나 우리가이 모든 것들을 인덱스에 넣는다면 데이터베이스는 그것을 사용하여 필요한 것을 찾을 수있다"고 생각했다.
다음과 같은 테이블을 상상해보십시오.
id int pk/uid
name varchar(50)
customerId int (foreign key)
dateCreated datetime
나는 포함한 단일 인덱스 볼 수 있습니다 name
, customerId
그리고 dateCreated
필드.
그러나 내 이해는 그러한 색인이 예를 들어 다음과 같은 쿼리에서 사용되지 않는다는 것입니다.
SELECT [id], [name], [customerId], [dateCreated]
FROM Representatives WHERE customerId=1
ORDER BY dateCreated
이러한 쿼리의 경우 필드가 '첫 번째'인 customerId
and 및 dateCreated
필드를 포함하는 인덱스가 더 나은 아이디어라고 생각 customerId
합니다. 이렇게하면이 쿼리가 필요한 순서대로 필요한 것을 빠르게 찾을 수있는 방식으로 데이터를 구성하는 인덱스가 만들어집니다.
내가 처음 보는 것만 큼 자주 볼 또 다른 것은 각 필드의 개별 색인입니다. 그래서, 한 각 name
, customerId
및 dateCreated
필드.
첫 번째 예와는 달리, 이런 형태의 배열은 때때로 적어도 부분적으로 유용한 것으로 보인다. 쿼리의 실행 계획은 적어도에서 인덱스를 사용 customerId
하여 레코드를 선택하고 있지만 인덱스를 dateCreated
필드 와 함께 사용하여 정렬 하지는 않음을 보여줄 수 있습니다.
특정 테이블 세트의 특정 쿼리에 대한 특정 답변은 일반적으로 실행 계획에서 수행 할 작업을 확인하고 그렇지 않으면 테이블 및 쿼리의 세부 정보를 가져 오는 것이기 때문에 이것이 광범위한 질문이라는 것을 알고 있습니다. 계정. 또한 특정 인덱스를 유지 관리하는 오버 헤드와 달리 쿼리가 얼마나 자주 실행될 수 있는지에 달려 있습니다.
그러나 내가 묻는 것은 인덱스의 일반적인 '시작점'이라고 생각합니다. 빈번하게 자주 쿼리되는 특정 쿼리와 WHERE 또는 ORDER BY 절의 필드에 대한 특정 인덱스를 갖는 아이디어가 의미가 있다고 생각합니까?