복붙노트

[SQL] MySQL은 한 두 개의 열 인덱스 대 두 단일 열 인덱스?

SQL

MySQL은 한 두 개의 열 인덱스 대 두 단일 열 인덱스?

나는 다음에 직면 그리고 난하지 않도록 가장 좋은 방법은 무엇입니다.

다음 표를 (큰 얻을 것이다) 고려 :

ID PK | giver_id FK | recipient_id FK | 데이트

나는 이노을 사용하고 있는데 내가 이해에서, 자동으로 두 개의 외래 키 열에 대한 인덱스를 생성합니다. 그러나, 나는 또한 내가의 특정 조합과 일치 할 필요는 쿼리를 많이하고있을 것입니다 :

SELECT ... WHERE giver_id = X AND recipient_id = t.

이러한 각 조합은 테이블에서 고유해야합니다.

이러한 열 통해 두 개의 열 인덱스를 추가하는 어떤 혜택이 있나요, 또는 이론의 두 가지 개별 지수는 충분하다 / 동일?

해결법

  1. ==============================

    1.당신이 두 개의 단일 열 인덱스가있는 경우, 그 중 하나는 당신의 예제에 사용됩니다.

    당신이 두 개의 단일 열 인덱스가있는 경우, 그 중 하나는 당신의 예제에 사용됩니다.

    두 개의 열이있는 인덱스가있는 경우, 쿼리가 빠를 수 (당신은 측정한다). 두 개의 열 색인은 오직 제 나열된 열의 단일 컬럼 인덱스로서 사용될 수있다.

    때때로 (A, B)에 대한 인덱스와 (B)의 다른 인덱스가 유용 할 수 있습니다. 이 쿼리는 더 많은 디스크 공간을 빠르게하거나 또는 열을 모두 사용하지만, 물론 사용의 수 있습니다.

    인덱스를 선택할 때, 당신은 또한 삽입, 삭제 및 업데이트에 대한 영향을 고려해야합니다. 더 많은 인덱스 = 느린 업데이트됩니다.

  2. ==============================

    2.커버링 인덱스 같은

    커버링 인덱스 같은

    ALTER TABLE your_table ADD INDEX (giver_id, recipient_id);
    

    ... 인덱스가 쿼리 giver_id 언급 경우에 사용, 또는 giver_id 및 recipient_id의 조합 될 수 있음을 의미한다. 왼쪽을 기반으로하는 인덱스 기준을 마음 - 만 recipient_id 참조하는 쿼리는 내가 제공 한 문에서 커버 인덱스를 사용 할 수 없습니다.

    또한, MySQL은 단지 쿼리를 최적화하는 가장 좋은 수단이 될 것 포함하는 인덱스 있도록 SELECT 당 하나의 인덱스를 사용할 수 있습니다.

  3. ==============================

    3.외부 키 인덱스가 이미 매우 선택적인 경우, 데이터베이스 엔진은 사용자가 지정한 쿼리에 대한 하나를 사용해야합니다. 대부분의 데이터베이스 엔진은 그 상황에서 최적의 인덱스를 선택할 수 있도록 휴리스틱의 어떤 종류를 사용합니다. 도 지수는 그 자체로 매우 선택적 경우, 아마 당신은 당신이 쿼리 많은의 유형을 사용합니다 말 이후 두 키에 내장 된 인덱스를 추가 할 수 있도록 감각을한다.

    외부 키 인덱스가 이미 매우 선택적인 경우, 데이터베이스 엔진은 사용자가 지정한 쿼리에 대한 하나를 사용해야합니다. 대부분의 데이터베이스 엔진은 그 상황에서 최적의 인덱스를 선택할 수 있도록 휴리스틱의 어떤 종류를 사용합니다. 도 지수는 그 자체로 매우 선택적 경우, 아마 당신은 당신이 쿼리 많은의 유형을 사용합니다 말 이후 두 키에 내장 된 인덱스를 추가 할 수 있도록 감각을한다.

    이 테이블의 PK 필드를 제거하고 giver_id 및 recipient_id 필드에 대한 기본 키 인덱스를 정의 할 수 있는지 고려해야 할 또 다른 점이다. 당신은 아마도 일 (만이 대답 할 수있는 다른 조건을 많이 제공) 할 수 있도록 조합이 독특했다. 일반적으로,하지만, 내가 추가하는 복잡성이 번거 로움 가치가 없다라고 생각합니다.

  4. ==============================

    4.고려해야 할 또 다른 점은 두 가지 접근 방식의 성능 특성은 데이터 세트의 크기와 기수에 근거하는 것입니다. 당신은 2 열 인덱스는 특정 데이터 세트의 크기 임계 값, 또는 정반대 더 확대됨에 몰래된다 찾을 수 있습니다. 아무것도 정확한 시나리오에 대한 성능 메트릭을 대체 할 수 있습니다.

    고려해야 할 또 다른 점은 두 가지 접근 방식의 성능 특성은 데이터 세트의 크기와 기수에 근거하는 것입니다. 당신은 2 열 인덱스는 특정 데이터 세트의 크기 임계 값, 또는 정반대 더 확대됨에 몰래된다 찾을 수 있습니다. 아무것도 정확한 시나리오에 대한 성능 메트릭을 대체 할 수 있습니다.

  5. from https://stackoverflow.com/questions/2349817/two-single-column-indexes-vs-one-two-column-index-in-mysql by cc-by-sa and MIT license