2011-01-17 4 views
2

무엇이 선호됩니까? 두 개의 열과 INDEX를 함께 사용하거나 새로운 열과 INDEX 열을 만듭니다. 예를 들어 실행두 개의 열이 하나의 열로 색인화되거나 하나의 열로 색인화 됨

SELECT value FROM preferences WHERE user_id = 1 AND key = 'something';

또는 reference라는 이름의 다른 열을 만들고 그 다음 값 1_something 포함되어 있으며 다음과 같습니다 :

SELECT value FROM preferences WHERE reference = '1_something';

INDEX(user_id, key)

은 다음과 같이 실행 안부 인사, 앤드류

답변

2

모든 항목 인덱싱과 마찬가지로, 상황에 따라 다릅니다.

개인적으로 필자는 데이터에 대해 생각할 때 더 정확한 하나의 인덱스 버전을 선택하고 쿼리를 명확하게하고 범위 선택을 허용합니다. 합성 참조 열은 varchar 유형, 두 개의 별도 int 및 varchar 될 수있는 비록 내가 비록 두 가지 비교가 빨리 될 것이라고 믿습니다 ...

혹시 key없이 user_id 쿼리합니까? IE는 특정 사용자에 대한 모든 환경 설정을 반환합니다.

특정 설정을 사용하는 모든 사용자에 대해 범위 쿼리를 수행합니까, 아니면 1_something이 비효율적입니까? (varchars를 값의 범위와 비효율적으로 비교)

실행할 가능성이있는 다른 쿼리, 테이블의 예상 크기, 샘플 값 등을 모르면 확실하지 않을 수 있습니다.

0

첫 번째 색인 (2 열에 대한 색인)이 훨씬 좋습니다. 이 인덱스는 user_id의 인덱스를 사용하는 쿼리에도 사용됩니다. 추가 열이 하나 인 경우 user_id 또는 something이 변경 될 때마다 값을 동기화해야합니다.

0

첫 번째 열은 항상 더 좋습니다. 하나의 열 user_id로 질의하는 경우에는 여전히 동일한 인덱스를 사용할 수 있습니다. 복합 키 인덱스는 더 나은 키 검색을 제공합니다.

관련 문제