[SQL] MySQL은 한 두 개의 열 인덱스 대 두 단일 열 인덱스?
SQLMySQL은 한 두 개의 열 인덱스 대 두 단일 열 인덱스?
나는 다음에 직면 그리고 난하지 않도록 가장 좋은 방법은 무엇입니다.
다음 표를 (큰 얻을 것이다) 고려 :
ID PK | giver_id FK | recipient_id FK | 데이트
나는 이노을 사용하고 있는데 내가 이해에서, 자동으로 두 개의 외래 키 열에 대한 인덱스를 생성합니다. 그러나, 나는 또한 내가의 특정 조합과 일치 할 필요는 쿼리를 많이하고있을 것입니다 :
SELECT ... WHERE giver_id = X AND recipient_id = t.
이러한 각 조합은 테이블에서 고유해야합니다.
이러한 열 통해 두 개의 열 인덱스를 추가하는 어떤 혜택이 있나요, 또는 이론의 두 가지 개별 지수는 충분하다 / 동일?
해결법
-
==============================
1.당신이 두 개의 단일 열 인덱스가있는 경우, 그 중 하나는 당신의 예제에 사용됩니다.
당신이 두 개의 단일 열 인덱스가있는 경우, 그 중 하나는 당신의 예제에 사용됩니다.
두 개의 열이있는 인덱스가있는 경우, 쿼리가 빠를 수 (당신은 측정한다). 두 개의 열 색인은 오직 제 나열된 열의 단일 컬럼 인덱스로서 사용될 수있다.
때때로 (A, B)에 대한 인덱스와 (B)의 다른 인덱스가 유용 할 수 있습니다. 이 쿼리는 더 많은 디스크 공간을 빠르게하거나 또는 열을 모두 사용하지만, 물론 사용의 수 있습니다.
인덱스를 선택할 때, 당신은 또한 삽입, 삭제 및 업데이트에 대한 영향을 고려해야합니다. 더 많은 인덱스 = 느린 업데이트됩니다.
-
==============================
2.커버링 인덱스 같은
커버링 인덱스 같은
ALTER TABLE your_table ADD INDEX (giver_id, recipient_id);
... 인덱스가 쿼리 giver_id 언급 경우에 사용, 또는 giver_id 및 recipient_id의 조합 될 수 있음을 의미한다. 왼쪽을 기반으로하는 인덱스 기준을 마음 - 만 recipient_id 참조하는 쿼리는 내가 제공 한 문에서 커버 인덱스를 사용 할 수 없습니다.
또한, MySQL은 단지 쿼리를 최적화하는 가장 좋은 수단이 될 것 포함하는 인덱스 있도록 SELECT 당 하나의 인덱스를 사용할 수 있습니다.
-
==============================
3.외부 키 인덱스가 이미 매우 선택적인 경우, 데이터베이스 엔진은 사용자가 지정한 쿼리에 대한 하나를 사용해야합니다. 대부분의 데이터베이스 엔진은 그 상황에서 최적의 인덱스를 선택할 수 있도록 휴리스틱의 어떤 종류를 사용합니다. 도 지수는 그 자체로 매우 선택적 경우, 아마 당신은 당신이 쿼리 많은의 유형을 사용합니다 말 이후 두 키에 내장 된 인덱스를 추가 할 수 있도록 감각을한다.
외부 키 인덱스가 이미 매우 선택적인 경우, 데이터베이스 엔진은 사용자가 지정한 쿼리에 대한 하나를 사용해야합니다. 대부분의 데이터베이스 엔진은 그 상황에서 최적의 인덱스를 선택할 수 있도록 휴리스틱의 어떤 종류를 사용합니다. 도 지수는 그 자체로 매우 선택적 경우, 아마 당신은 당신이 쿼리 많은의 유형을 사용합니다 말 이후 두 키에 내장 된 인덱스를 추가 할 수 있도록 감각을한다.
이 테이블의 PK 필드를 제거하고 giver_id 및 recipient_id 필드에 대한 기본 키 인덱스를 정의 할 수 있는지 고려해야 할 또 다른 점이다. 당신은 아마도 일 (만이 대답 할 수있는 다른 조건을 많이 제공) 할 수 있도록 조합이 독특했다. 일반적으로,하지만, 내가 추가하는 복잡성이 번거 로움 가치가 없다라고 생각합니다.
-
==============================
4.고려해야 할 또 다른 점은 두 가지 접근 방식의 성능 특성은 데이터 세트의 크기와 기수에 근거하는 것입니다. 당신은 2 열 인덱스는 특정 데이터 세트의 크기 임계 값, 또는 정반대 더 확대됨에 몰래된다 찾을 수 있습니다. 아무것도 정확한 시나리오에 대한 성능 메트릭을 대체 할 수 있습니다.
고려해야 할 또 다른 점은 두 가지 접근 방식의 성능 특성은 데이터 세트의 크기와 기수에 근거하는 것입니다. 당신은 2 열 인덱스는 특정 데이터 세트의 크기 임계 값, 또는 정반대 더 확대됨에 몰래된다 찾을 수 있습니다. 아무것도 정확한 시나리오에 대한 성능 메트릭을 대체 할 수 있습니다.
from https://stackoverflow.com/questions/2349817/two-single-column-indexes-vs-one-two-column-index-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 추가 된 문자열 CONCAT가 작동하지 필드에서 SQL UPDATE는 모든 값 (0) | 2020.05.31 |
---|---|
[SQL] 어떻게하면 메인 쿼리의 각 레코드에 대해 하나 개의 레코드 (선택 상위 1)을 가져야한다 (SQL 서버)에 하위 쿼리에서 여러 열을 선택할 수 있습니다? [복제] (0) | 2020.05.31 |
[SQL] 읽을 수있는 / 계층 적 형식으로 배열을 표시 (0) | 2020.05.31 |
[SQL] SQL에서 뷰의 차이 및 테이블 (0) | 2020.05.31 |
[SQL] 어떻게 PostgreSQL을 특정 컬럼을 갖는 테이블을 찾을 수 (0) | 2020.05.31 |