mySQL 테이블을 정렬하면 인덱스가 사용되지 않고 이유를 알 수 없습니다.인덱스를 사용하지 않는 매우 간단한 mysql 쿼리
CREATE TABLE IF NOT EXISTS `test` (
`a` int(11) NOT NULL,
`b` int(11) NOT NULL,
KEY `kk` (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
을이 :
내가있어
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE test ALL NULL NULL NULL NULL 10009 Using filesort
이
EXPLAIN SELECT *
FROM test
USE INDEX (kk)
ORDER BY a
뿐만 아니라
EXPLAIN SELECT *
FROM test
ORDER BY a
나에게이 있습니다
이 파일을보고 싶지 않고 kk 키를 사용하여 테이블을 정렬하고 싶습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
내 소식을 보내 주셔서 감사합니다. 그러나 이제는 "테이블 스캔"과 "파일 정렬"이 의미하는 바가 무엇인지 알지 못합니까? 모든 필드와 테이블의 모든 행을 선택하는 경우에도 해당 열의 인덱스 내부 트리를 O (n)로 이동하여 테이블을 한 열 정렬하는 것이 더 빠르지 않습니까? 각 행에 대해 O (1)에서 요청 된 여분의 열을 파일로 만드십시오.>> 인덱스 파일은 테이블 파일에 각 행의 물리적 위치를 저장합니까? O (n * log n)에서 색인을 건드리지 않고 테이블 파일에 (잠재적으로) 임의로 저장된 행을 빠른 정렬로? 나는 MySQL에서 색인이 어떻게 작동하는지에 대한 나의 이해가 잘못되었다고 생각합니다. 전체 검사를 사용하는 것이 더 효율적으로 MySQL의 추정 -
1)에서 "모든 행"을 의미합니까? –
@a_horse_with_no_name : 아마도 "전체 테이블"(또는 "모든 행")을 의미했을 것입니다. 올바른 방법으로 영어로 표현하는 방법을 모릅니다. – zerkms
예, "전체 테이블"또는 "모든 행"이 더 좋을 것이라고 생각합니다. –