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
'programing' 카테고리의 다른 글
%를(를) 사용할 수 없음:자르기Remainer를 대신 사용합니다."는 다음을 의미합니까? (0) | 2023.09.27 |
---|---|
MySQL 쿼리에서 SELECT로 INSERT INTO를 수행할 때 정적 값을 추가하는 방법은 무엇입니까? (0) | 2023.09.27 |
If a global variable is initialized to 0, will it go to BSS? (0) | 2023.09.27 |
일부 다른 값을 기반으로 하는 Mysql RAND() 함수 (0) | 2023.09.27 |
MYSQL Left Join NULL 값을 선택하려면 어떻게 해야 합니까? (0) | 2023.09.17 |