2012-12-29 1 views
3

4 개의 열로 Innodb 테이블을 생성합니다. 논리적 관점에서 표MySQL Innodb : 대형 복합 PK 다른 색인 없음

column_a (tiny_int) 
column_b (medium_int) 
column_c (timestamp) 
column_d (medium_int) 

Primary Key -> column_a, column_b, column_c 

는 컬럼 A, B는, C는 (사용 지수) I을 성능 향상 인덱스로부터 직접 판독 할 수 있도록하는 PK together.However으로 이루어져야 4 열 (A, B, C, D) 모두로 구성된 PK를 고려하고 있습니다.

질문

성능이 이노 디비 테이블에 기본 키에 추가 열을 추가 어떻게 될 것인가?

  • 표를 읽을 대리 기본 키가 절대적으로
  • 다른 인덱스는이 테이블에 존재하지 않습니다 질문 벗어
    • 사항

      /쓰기 (모두 동일한 약)
    집중

    감사합니다!

  • +2

    PK에'column_d '를 추가하면'column_d'가 다른 한''(column_a, column_b, column_c) '에 동일한 값을 가진 여러 레코드로 끝날 수 있습니다. 또한, 다른 인덱스를 테이블에 추가하는 것을 거부하는 이유는 다음과 같습니다. 커버 릳 인덱스를 원한다면, PK에 * 추가하지 않으시겠습니까? ** 조숙 한 최적화는 모든 악의 근원 **임을 기억하십시오 - 실제로 해결하려는 성능 문제에 직면 해 있습니까? 그렇다면 무엇입니까? – eggyal

    +0

    'column_d'와 매우 좋은 점이 있었고 어림짐작이나 지침 원리가 있는지 궁금해했습니다. 큰 PK가있는 테이블이 꽤 많아서지도를 원했습니다. 감사합니다. – ProfileTwist

    답변

    0

    몇 가지 고려해야 할

    문제의 쿼리가 인덱스의 모든 열을 사용하지 않는
    1. , 인덱스가 사용되지 않습니다.
    2. 으로 jeremycole 참고 :이 개념이 덮여

    이노 디비 구조에있는 모든 행 데이터가 클러스터 된 인덱스의 B - 트리의 리프 노드에 저장된다 (PRIMARY INDEX) http://www.innodb.com/wp/wp-content/uploads/2009/05/innodb-file-formats-and-source-code-structure.pdf 에 http : // 블로그 .johnjosephbachir.org/10분의 2,006// 22 모든 - 당신 - 알 필요 - 약 - 설계 - mysql을 - 이노 - 차 키/

    ... 여기 제레미의 블로그 게시물 : http://blog.jcole.us/2013/01/07/the-physical-structure-of-innodb-index-pages/

    이와 같이 A, B, C에 대한 질의 이 Innodb 테이블의 모든 값을 효율적으로 얻는 데 충분합니다.

    +1

    죄송 합니다만,이 답변은 잘못되었습니다.InnoDB의 'PRIMARY KEY'인덱스 구조는 키가 아닌 모든 필드를 "값"으로 포함하므로 별도의 "데이터"구조가 없다 (예 : MyISAM'.MYD' 파일의 경우). 이 경우 별도의 커버 링 인덱스를 작성하면 이익보다 해를 끼칠 수 있습니다. – jeremycole

    +0

    jeremy는 이전의 잘못된 대답에 대해 절대적으로 정확합니다. – Drew

    1

    InnoDB에서 PRIMARY KEY 색인 구조는 모든 비 키 필드를 포함하며 인덱스 쿼리 및 행 제거를 다루는 데 자동으로 사용됩니다. PRIMARY KEY 색인 구조 이외의 별도 "데이터"구조는 없습니다. PRIMARY KEY 정의 필드에 필드를 추가 할 필요는 없습니다. InnoDB 테이블에서 PRIMARY KEY을 사용할 때 Using index을 표시하지 않는다는 점에 유의하십시오. 이는 메시지 추가를 트리거하지 않는 다른 코드 경로이기 때문입니다.

    +0

    .. 때문에 ...? –

    +0

    @ypercube 하하, 거기에서 흔적을 발견하지 못했습니다 ... – jeremycole