2013-04-28 2 views
0

MySQl InnoDB에서, btree 인덱스에 몇 개의 컬럼이 있는가?각각 1 col를 포함하는 MySQL 다중 색인? 또는 여러 개의 cols를 포함하는 1 개의 인덱스?

Key1 contains cols (col1, col2, col3) 

또는

Key1 contains col1 
Key2 contains col2 
Key3 contains col3 

이 문제를합니까 : 예를 들어

? 감사!

+0

"이 문제가 있습니까?" 정말 가난한 질문입니다. 네, 많은면에서 "중요합니다". 모든 것에 상쇄 관계가 있습니다. 더 구체적으로하십시오 – Jeff

+0

트레이드 오프는 무엇입니까? 나는 열을 함께 그리고 seperatly 쿼리 것입니다. 엄선 된 많은 인서트. 1 천 1 백만 이상의 행. – user1797484

+0

나는 데이터를 현명하게 만드는 디자인에 대해 이야기 할 것입니다. 예를 들어 항상 3 개의 열이있는 경우 한 번에 가져 오지 않는 이유는 무엇입니까? 아마도 한 줄로 더 나아질 것입니다. 열의 수가 다른 경우 빈 열을 많이 저장하는 이유는 무엇입니까? 컬럼 당 행을 사용하는 것이 더 나을 것입니다. 나는 어느 쪽이든 현명하게 수행 할 수 있을지 의심 스럽다. –

답변

0

예, 중요합니다.

큰 지수는 음 ... 더 큽니다. :-) 알다시피, 더 많은 디스크 공간, 읽기/업데이트 등이 더 느립니다.

실제로 크기가 너무 커지면 작은 대체 색인이 트릭을 수행 할 수있는 경우 계획자가 무시할 수 있습니다.

+0

그래서 그것들을 별도로 만드는 것이 더 좋습니까? – user1797484

+0

그것은 당신이하고있는 일, db 엔진 등에 달려 있습니다. 때로는 인덱스에 두 개 이상의 열을 갖는 것이 유용 할 때가 있습니다. –

+0

http://stackoverflow.com/questions/6098616/dos-and-donts-for-indexes/6098727#6098727 –

0

(col1, col2, col3)에 인덱스를 사용할 수 있습니다 :

where col1 = 1 and col2 = 2 and col3 = 3 
where col1 = 1 and col3 = 3 
where col1 = 1 

하지만하지 않는 :

where col2 = 2 and col3 = 3 
where col3 = 3 

col2의 값을 quicky 검색하려면 col2.(col2) 등으로 시작하는 인덱스를 필요 또한 (col2, col3, col1)입니다.

col2 또는 col3col1과 독립적으로 검색하려면 3 개의 색인이 훨씬 우수한 옵션입니다.

+0

col1, col2 및 col3의 색인이 col1에서 독립적으로 작동하지만 col2 및 col3에서 독립적으로 작동하지 않는 이유는 무엇입니까? ? 명령이 중요합니까? – user1797484

+0

색인은 종이 전화 번호부와 같습니다. 성으로 사람들을 볼 수 있습니다. 이름으로 볼 수는 없습니다. 이름으로 이름을 찾으려면 이름으로 정렬 된 두 번째 전화 번호부가 필요합니다. – Andomar

+0

@ user1797484 예, 다중 열 인덱스에는 순서 종속성이 있습니다. col1, col2의 인덱스는 col2에서만 작동하지 않습니다. –

관련 문제