나는 다음과 같은 테이블이 : 나는 쿼리를더 많은 열을 쿼리 할 때 MYSQL이 동일한 쿼리에 인덱스를 사용하지 않는 이유는 무엇입니까?
select id from stuff order by id;
을 EXPLAIN 경우
create table stuff (
id mediumint unsigned not null auto_increment primary key,
title varchar(150) not null,
link varchar(250) not null,
time timestamp default current_timestamp not null,
content varchar(1500)
);
을 다음은 결과를 주문하는 지표로 그들에게 차 키를 사용하여 말한다. 하지만이 쿼리 :
select id,title from stuff order by id;
가 EXPLAIN 더 가능한 키 말한다 그것은 filesort에 의지한다.
왜 그럴까요? 특정 행의 데이터가 데이터베이스에 함께 저장되어 있지 않습니까? ID 만 쿼리 할 때 인덱스를 사용하여 결과를 정렬 할 수 있다면 다른 열을 쿼리에 추가하면 왜 차이가 발생합니까? 기본 키는 이미 행을 식별하므로 두 번째 경우에도 순서 지정에 기본 키를 사용해야한다고 생각합니다.
왜 이것이 사실이 아닌지 설명 할 수 있습니까?
답변에 대한 확신이 없지만 작동 방식은 다음과 같습니다. http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html – DhruvPathak
해당 사례 없음 색인을 사용할 수없는 목록은 여기에 적용되는 것 같습니다. – Tom
다이빙을하지 않고 이러한 것들에 대해 더 자세히 알고 싶다면 개발자를위한 [SQL 인덱싱 자습서 (MySQL 포함)] (http://use-the-index-luke.com/)에 관심이있을 수 있습니다. 귀하의 특별한 질문은 첫 장 - [색인의 구조] (http://use-the-index-luke.com/de/sql/anatomy)에서 답변을 얻을 수 있습니다. –