programing

MySQL에서 두 개의 단일 열 인덱스와 하나의 두 열 인덱스를 비교하시겠습니까?

yoursource 2022. 11. 21. 23:38
반응형

MySQL에서 두 개의 단일 열 인덱스와 하나의 두 열 인덱스를 비교하시겠습니까?

나는 다음과 같은 문제에 직면해 있고 무엇이 최선책인지 잘 모르겠다.

다음 표(큰 표)를 검토합니다.

ID PK | giver_id FK | recipient_id FK | date

InnoDB를 사용하고 있는데, 제가 알기로는 두 개의 외래 키 열에 대한 인덱스가 자동으로 생성됩니다.다만, 다음의 특정의 편성에 일치할 필요가 있는 질문도 많이 합니다.

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

이러한 각 조합은 표에서 고유합니다.

이 열에 대해 두 개의 열 지수를 추가하면 어떤 이점이 있는가, 아니면 이론적으로 두 개의 개별 지수로 충분하거나 같을 것인가?

두 개의 단일 열 인덱스가 있는 경우 예제에서 하나만 사용됩니다.

두 개의 열이 있는 인덱스가 있는 경우 조회가 더 빠를 수 있습니다(측정해야 함).두 개의 열 인덱스를 단일 열 인덱스로 사용할 수도 있지만 먼저 나열된 열에 대해서만 사용할 수 있습니다.

때로는 (A, B)에 지수를 두고 (B)에 다른 지수를 두는 것이 유용할 수 있다.따라서 두 열 중 하나 또는 두 열을 모두 사용하는 쿼리가 빨라지지만 디스크 공간도 더 많이 사용됩니다.

인덱스를 선택할 때 삽입, 삭제 및 업데이트에 미치는 영향도 고려해야 합니다.더 많은 인덱스 = 더 느린 업데이트입니다.

커버리지수는 다음과 같습니다.

ALTER TABLE your_table ADD INDEX (giver_id, recipient_id);

가 ...을 인덱스를 할 수 .쿼리가 다음을 참조할 경우 인덱스를 사용할 수 있습니다.giver_id 「」의 .giver_id ★★★★★★★★★★★★★★★★★」recipient_id맨 . - 하는 쿼리입니다. - 참조하다. - 참조하다.recipient_id제가 제공한 명세서에서는 커버리지수를 사용할 수 없습니다.

일부 이전 MySQL 버전은 SELECT당 하나의 인덱스만 사용할 수 있으므로 커버링 인덱스는 쿼리를 최적화하는 가장 좋은 방법입니다.

외부 키 인덱스 중 하나가 이미 매우 선택적인 경우 데이터베이스 엔진은 지정한 쿼리에 해당 인덱스를 사용해야 합니다.대부분의 데이터베이스 엔진은 그러한 상황에서 최적의 인덱스를 선택하기 위해 일종의 경험적 접근 방식을 사용합니다.두 인덱스 모두 자체 선택성이 높지 않은 경우 두 키 모두에 내장된 인덱스를 추가하는 것이 타당할 수 있습니다. 왜냐하면 이러한 유형의 쿼리를 많이 사용할 것이라고 말씀하셨기 때문입니다.

고려해야 할 또 다른 사항은 이 테이블에서 PK 필드를 삭제하고 프라이머리 키인덱스를 정의할 수 있는지 여부입니다.giver_id그리고.recipient_id[ ]를 클릭합니다.조합이 독특하다고 하셨기 때문에, 아마 효과가 있을 것이라고 말씀하셨습니다(여러분만이 대답할 수 있는 다른 많은 조건을 고려하면).그러나 일반적으로 복잡성이 더해져도 번거롭게 할 필요는 없다고 생각합니다.

고려해야 할 또 다른 사항은 두 접근 방식의 성능 특성이 데이터 세트의 크기와 카디널리티에 기반한다는 것입니다.2-컬럼 인덱스는 특정 데이터 세트 크기 임계값에서 또는 그 반대로만 성능이 향상된다는 것을 알 수 있습니다.정확한 시나리오의 퍼포먼스 메트릭을 대체할 수 있는 것은 없습니다.

언급URL : https://stackoverflow.com/questions/2349817/two-single-column-indexes-vs-one-two-column-index-in-mysql

반응형