programing

EXPRESON의 "Using index"와 "Using were; Using index"의 차이점은 무엇입니까?

newsource 2023. 9. 27. 17:57

EXPRESON의 "Using index"와 "Using were; Using index"의 차이점은 무엇입니까?

mysql의 설명의 추가 필드에서 다음을 얻을 수 있습니다.

  • Using index
  • Using where; Using index

그 둘의 차이점은 무엇입니까?

제 질문을 더 잘 설명하기 위해 다음 표를 사용하겠습니다.

CREATE TABLE `test` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `another_field` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

INSERT INTO test() VALUES(),(),(),(),();

내용은 다음과 같습니다.

SELECT * FROM `test`;

id  another_field
1   0
2   0
3   0
4   0
5   0

제 연구에서 발견한 것은

이 쿼리가 인덱스 대신 where를 사용하는 이유는 무엇입니까?

산출량EXPLAIN때로는 오해의 소지가 있습니다.

예를 들어.filesort파일과는 아무 관련이 없습니다using where당신이 a를 사용하고 있다는 것을 의미하지 않습니다.WHERE절, 그리고using index정의된 단일 인덱스 없이 테이블에 나타날 수 있습니다.

Using where단지 테이블에 제한 조항이 있다는 것을 의미합니다 (WHERE아니면ON), 그리고 모든 레코드가 반환되지 않습니다.참고:LIMIT제한 절로 간주되지 않습니다(그럴 수도 있지만).

Using index테이블의 레코드를 검색하지 않고 인덱스에서 모든 정보를 반환하는 것을 의미합니다.이는 쿼리에 필요한 모든 필드가 인덱스에 포함된 경우에만 가능합니다.

선택하시니*, 이것은 불가능합니다.이외의 필드category_id,board_id,display그리고.order인덱스에 포함되지 않으므로 조회해야 합니다.

그리고 저도 발견했습니다.

https://dev.mysql.com/doc/refman/5.1/en/explain-output.html#explain-extra-information

인덱스사용

열 정보는 실제 행을 읽기 위해 추가 탐색을 수행할 필요 없이 인덱스 트리의 정보만 사용하여 테이블에서 가져옵니다.쿼리가 단일 인덱스의 일부인 열만 사용하는 경우 이 전략을 사용할 수 있습니다.

[추가] 열에 [위치 사용]이라고 표시되어 있으면 인덱스를 사용하여 주요 값을 조회하고 있음을 의미합니다.여기서 사용하지 않으면 최적화자는 데이터 행을 읽지 않도록 인덱스를 읽고 있지만 조회에는 사용하지 않을 수 있습니다.예를 들어 인덱스가 쿼리에 대한 커버링 인덱스인 경우 Optimizer는 조회에 사용하지 않고 인덱스를 검색할 수 있습니다.

사용자 정의 클러스터 인덱스가 있는 InnoDB 테이블의 경우 Using index가 Extra 열에 없을 때도 해당 인덱스를 사용할 수 있습니다.type이 index이고 key가 primary인 경우입니다.

(두번째 단락 보기)

이것에 대한 나의 문제:

첫 번째: 두 번째 단락이 쓰여 있는 방식을 이해하지 못했습니다.

두번째:

다음 쿼리는 반환합니다.

EXPLAIN SELECT id FROM test WHERE id = 5;

id  select_type table   type    possible_keys   key     key_len ref     rows    Extra
1   SIMPLE      test    const   PRIMARY         PRIMARY 8       const   1       Using index

(오른쪽으로 스크롤)

그리고 이 다른 쿼리는 다음을 반환합니다.

EXPLAIN SELECT id FROM test WHERE id > 5;

id  select_type table   type    possible_keys   key     key_len ref     rows    Extra
1   SIMPLE      test    range   PRIMARY         PRIMARY 8       NULL    1       Using where; Using index

(오른쪽으로 스크롤)

한 쿼리는 상수 한다는 사실 두 모두 합니다를 합니다.some restricting clause on the table (WHERE or ON), and not all record will be returned.

을 합니까?Using where;두번째 쿼리의 의미는? 그리고 첫번째 쿼리에 없다는 사실은 무엇을 의미합니까?


추가의

와의 입니까?Using index condition; Using where (자가 포함된 작은 조각 os 코드로 재현하지 못했기 때문에 이 예시는 추가하지 않습니다.)

때는.Using Index설명의 추가 부분에서 이는 (커버링) 인덱스가 쿼리에 적합하다는 것을 의미합니다.
에서:SELECT id FROM test WHERE id = 5;시킬 수 에 액세스할 가 없습니다(다능)에만).id(설명대로) 인덱스만 사용합니다.PK가 고유 인덱스를 통해 구현되는 것을 모르는 경우.

때는.Using Index; Using where이는 먼저 인덱스를 사용하여 레코드를 검색한 후(테이블에 대한 실제 액세스가 필요 없음) 이 결과 위에 where 절의 필터링을 설정함을 의미합니다.
이 예에서는 다음과 같습니다.SELECT id FROM test WHERE id > 5; 다음 큰에서 ID합니다와 .

언급URL : https://stackoverflow.com/questions/25672552/whats-the-difference-between-using-index-and-using-where-using-index-in-the