MySQL EXPLE: "인덱스 사용" vs."인덱스 조건 사용"
EXPLE을 사용한 쿼리 최적화에 대한 MySQL 5.4 설명서에는 다음과 같은 추가 설명이 나와 있습니다.
- 인덱스 사용
열 정보는 실제 행을 읽기 위해 추가 검색을 수행할 필요 없이 인덱스 트리의 정보만 사용하여 테이블에서 검색됩니다.이 전략은 쿼리가 단일 인덱스의 일부인 열만 사용할 때 사용할 수 있습니다.
[...]
- 인덱스 조건 사용
테이블은 인덱스 튜플에 액세스하여 먼저 테스트하여 전체 테이블 행을 읽을지 여부를 결정하여 읽습니다.이러한 방식으로 인덱스 정보는 필요하지 않은 경우 전체 테이블 행 읽기를 지연("푸시 다운")하는 데 사용됩니다.
제가 뭔가를 놓치고 있는 것일까요, 아니면 이 두 가지가 같은 것을 의미할까요(예: "행을 읽지 않았고 색인으로 충분했습니다")?
가장 잘 설명되는 예는 다음과 같습니다.
SELECT Year, Make --- possibly more fields and/or from extra tables
FROM myUsedCarInventory
WHERE Make = 'Toyota' AND Year > '2006'
Assuming the Available indexes are:
CarId
VIN
Make
Make and Year
이 쿼리는 myUsedCarInventory 테이블 자체를 "히트"할 필요가 전혀 없으므로 해당 테이블과 관련된 WHERE 절의 요소에 대한 필요성을 "커버"하기 때문에 'Index 사용'으로 설명합니다.
자, 상상해 보세요, 우리는 질문을 동일하게 유지하지만, 색상에 대한 조건을 추가합니다.
...
WHERE Make = 'Toyota' AND Year > '2006' AND Color = 'Red'
이 쿼리는 '인덱스 조건 사용'으로 설명될 수 있습니다('가능성', 여기서는 도요타 + 연도가 충분히 선택적이지 않을 것으로 추정되며, 최적화 도구가 테이블을 스캔하기로 결정할 수도 있습니다).이는 MySQL이 먼저 인덱스를 사용하여 Make + Year를 확인하고 Make + Year 조건을 충족하는 행에 대해서만 테이블에서 해당 행을 조회해야 한다는 것을 의미합니다.이를 "푸시 다운 최적화"라고 부르기도 합니다.
차이점은 "인덱스 사용"은 인덱스에서 테이블까지 조회할 필요가 없는 반면, "인덱스 조건 사용"은 때때로 조회해야 한다는 것입니다.예를 들어 설명해 보겠습니다.이 테이블이 있다고 칩시다.
id, name, location
인덱스를 사용한 상태
name, id
그러면 이 쿼리는 테이블이 필요하지 않고 "인덱스 사용" 정보를 모두 검색할 수 있습니다.
select id, name from table where name = 'Piskvor'
그러나 이 쿼리는 인덱스에서 위치를 검색할 수 없으므로 이름이 'Piskvor'인 모든 행에 대해 테이블 조회가 필요합니다.
select id from table where name = 'Piskvor' and location = 'North Pole'
쿼리는 여전히 인덱스를 사용하여 결과를 특정 이름의 작은 행 집합으로 제한할 수 있지만, 위치가 일치하는지 확인하려면 테이블의 해당 행을 살펴야 합니다.
언급URL : https://stackoverflow.com/questions/1687548/mysql-explain-using-index-vs-using-index-condition
'programing' 카테고리의 다른 글
Oracle에서 ORDER BY 다음에 +0이 표시되는 것은 무엇입니까? (0) | 2023.08.04 |
---|---|
Spring Boot : 'jpaMappingContext' 이름의 bone을 만드는 중 오류가 발생했습니다. java.lang.Null 포인터예외. (0) | 2023.08.04 |
이미지를 NSUserDefaults에 저장하시겠습니까? (0) | 2023.08.04 |
web.config의 단일 폴더에 대해 익명 인증을 허용하시겠습니까? (0) | 2023.08.04 |
Oracle FIRST/LAST에서 KEEP에 대한 설명 (0) | 2023.08.04 |