여러 곳에서 인덱스를 작성할 때 성능상의 이유로 가장 우선 순위가 높은 열을 먼저 넣어 두어야한다는 사실을 모든 곳에서 알게되었습니다. 왜 그럴까요? 그것은 신화입니까?다중 열 인덱스 열 순서
답변
내가
According to Tom 먼저 가장 선택적 열을 놓아야합니다, 열 선택은 인덱스에서 모든 열을 사용하는 쿼리에 대한 성능에 영향을주지 않습니다 (이 인덱스를 압축하는 오라클의 능력에 영향을 미치지 않음).
가장 중요한 것은 아니다. 확실히, 그것은 고려해야 할 것이지만 그것은 사물의 웅장한 계획에 상대적으로 멀리 떨어져 있습니다.
이가) 꽤 드문 B)의 값에 진정 따라 사용 (정말 완전히 왜곡 된 데이터로 위와 같이), 선택도 쉽게 문제 그러나, 그들은이되는 수있는 특정 이상한 매우 독특한 비정상적인 경우
런타임시, 왜곡 된 모든 쿼리는
입니다. 따라서 일반적으로 질문을보고,이를 기반으로 필요한 인덱스를 최소화하십시오.
인덱스의 위치를 고려하면 연결 인덱스의 열에있는 고유 값의 수가 관련이 없습니다.
그러나 색인 열 순서를 결정할 때 이러한 고려 사항이 두 번째로되어야합니다. 더 중요한 것은 인덱스가 많은 쿼리에 유용 할 수 있으므로 컬럼 순서는 쿼리의 where 절 (또는 AndreKR이 설명하는 이유로)에서 해당 열의 사용 (또는 그 부족)을 반영해야한다는 것입니다.
색인을 사용하는 방법 - 결정시 관련성이 있습니다.
다른 모든 것들은 동일하지만, 나는 여전히 가장 선택적인 컬럼을 먼저 넣을 것입니다. 그냥 기분이 ...
업데이트 :Another quote from Tom (밀라노에게 감사드립니다.)
오라클 5 (예, 버전 5!)에는 가장 선택적 열을 먼저 색인에 넣는 인수가 있습니다.
그 이후로 가장 식별이 어려운 항목을 인덱스 에 먼저 넣으면 인덱스가 더 작아 지거나 더 효율적이됩니다. 그것은 그렇듯이 보이지만 그렇지 않을 것입니다.
인덱스로는 키 압축을 사용하면 색인을 으로 작게 만들 수 있으므로 다른 방법으로 갈 수있는 매력적인 인수가 있습니다. 그러나 이전에 설명한 것처럼 인덱스 사용 방법에 따라 결정되어야합니다.
인덱스 압축 정보가 약간의 부수적 인 메모가 있지만 무시해서는 안됩니다. 인덱스를 압축하는 것은 멋진 아이디어입니다. – Craig
@Craig : 열 순서가 인덱스 압축에 어떤 영향을 미치는지는 알 수 있지만 다른 방법으로는 작동하지 않을 것입니다 (반복적 인 압축 가능 접두사를 초래하는 하위 카디널리티 선도 열). – Thilo
Tom은 ** Oracle 5 **에 대해 http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1296165726968#59899084713981 – milan
색인을 사용할 때 오른쪽에서 왼쪽으로 열을 생략 할 수 있습니다. 즉, 색인이 col_a, col_b
인 경우 WHERE col_a = x
에서 사용할 수 있지만 WHERE col_b = x
에서는 사용할 수 없습니다.
전화 번호부가 으로 정렬되고 그 다음에 성이 인 전화 번호부가 있다고 가정 해보십시오.
적어도 유럽과 미국의 이름은 성보다 선택성이 훨씬 떨어 지므로 이름을 올려도 결과가 많이 줄어들지 않으므로 정확한 성을 확인할 수있는 페이지가 많이 남아 있습니다. .
색인의 열 순서는 조회에 의해 결정되어야하며 선택성 고려 사항이 아니어야합니다. (a, b, c)에 대한 색인이 있고 대부분의 단일 열 조회가 c 열에 이어 a가 붙는 경우 최상의 효율성을 위해 색인 정의에 c, a, b의 순서로 넣습니다 . 오라클은 쿼리에 대해 인덱스의 가장 자리를 선호하지만 skip-scan이라는 덜 효율적인 액세스 경로에서 인덱스의 다른 컬럼을 사용할 수 있습니다.
색인이 더 선택적 일수록 연구가 가장 빠릅니다.
간단히 전화 번호부를 상상해보십시오. 대부분 성으로 빠른 사람을 찾을 수 있습니다. 그러나 같은 성을 가진 많은 사람들이 있다면 매번 이름을보고 그 사람을 찾는 데 더 많은 시간을 할애 할 것입니다.
따라서이 문제를 가능한 한 피하기 위해 가장 선택적인 열을 먼저 제공해야합니다.
또한 쿼리에서 이러한 "선택 기준"을 올바르게 사용하고 있는지 확인해야합니다.
+1이라고 말했습니다. 맞습니다. 이 작업이 완료되었다고 가정하면 (AndrewKR) 열을 오른쪽에서 왼쪽으로 놓을 수 있습니다. – PerformanceDBA
- 1. MySQL의 - 다중 열 인덱스의 순서
- 2. Sql Server 2005 인덱스 열 순서
- 3. 변화 데이터 그리드의 열 순서 또는 인덱스
- 4. 다중 열 인덱스와 SQL 쿼리의 순서
- 5. Persisting ListView 열 순서
- 6. Sqlyog에서 열 순서 재정렬
- 7. linq 열 순서 변경
- 8. Gridview 열 표시 순서
- 9. CATransform3D 행/열 순서
- 10. JPA 및 데이터베이스의 열 순서
- 11. SQL 서버에서 Rearrage 열 순서
- 12. ListView에서 열 순서 가져 오기
- 13. ActionScript의 DataGrid 열 순서 지정
- 14. MySQL 인덱스 및 순서
- 15. 다중 열 목록 상자
- 16. 다중 열 양식 만들기
- 17. 다중 열 콤보 상자
- 18. 다중 열 선택기
- 19. Excel 다중 열 평균
- 20. 다중 열 목록
- 21. 이미지가있는 다중 열 div
- 22. 다중 열 속성 레일
- 23. 다중 열 선택 상자
- 24. JTable의 다중 열 정렬
- 25. sqlite에서 인덱스 된 열 만들기
- 26. JQuery의 인덱스 별 JSON 열
- 27. C# datagridview 잘못된 열 인덱스
- 28. SQL Server : 동일한 열 성능에 대한 다중 인덱스
- 29. 다중 열이있는 UITableView의 다중 열 머리글
- 30. 오라클 삽입 다중 값 열
와우, 질문에 대한 답변이 많아서 – milan