2012-01-02 2 views
1

하나의 기본 키가 들어있는 테이블이 있습니다. 내가높은 한계에서 Mysql 인덱스가 작동하지 않습니다.

이 아이디 ASC의 LIMIT에 의해 뉴스 ORDER로부터 SELECT *를 EXPLAIN 실행하면 29

MySQL은 반환

id select_type  table type possible_keys key  key_len  ref  rows Extra 
1 SIMPLE   news ALL  NULL   NULL NULL  NULL  640  Using filesort 

그러나 에 의해 아이디 ASC LIMIT에 의해 뉴스 ORDER * FROM 을 선택 EXPLAIN 28 결과는

id select_type  table type possible_keys key  key_len  ref  rows Extra 
1 SIMPLE   news index NULL   PRIMARY 4   NULL  28 

SHOW INDEX FROM news;

Table, Non_unique, Key_name, Seq_in_index, Column_name, Collation, Cardinality, Sub_part, Packed, Null, Index_type, Comment 
'news', 0, 'PRIMARY', 1, 'id', 'A', 640, , '', '', 'BTREE', '' 
'news', 1, 'tarix', 1, 'tarix', 'A', 106, , '', '', 'BTREE', '' 
'news', 1, 'yayindil', 1, 'yayin', 'A', 3, , '', '', 'BTREE', '' 
'news', 1, 'yayindil', 2, 'dil', 'A', 7, , '', '', 'BTREE', '' 

다른 테이블에서 확인한 결과, 한계 4000에서도 잘 작동합니다. 무엇이 잘못 되었나요? 인덱스가 29 개 미만인 이유는 무엇입니까?

+0

테이블에 몇 행이 있습니까? –

+0

테이블에 640 개의 행이 있습니다. – Huseyin

+0

두 테이블 모두에서 인덱스가 비슷합니까? 'show index from news' 출력을보십시오. – Niloct

답변

0

옵티마이 저는 가장 저렴한 실행 경로를 선택하려고 시도하고 있습니다. 테이블에 640 행만 있으면 옵티 마이저가 전체 스캔을 선택하는 것이 이상하지 않습니다. 40000 개의 행을 가진 테이블을로드하면 전체 테이블 스캔을 선택하기 전에 한계 (아마도 2000 정도)를 늘려야한다는 것을 알게 될 것입니다.

관련 문제