그래서 난 그냥 새로운 열 FIELD3을 추가하고 또한 FIELD3MySQL은 전체 테이블 인덱스가
field1 field2 field3
에 인덱스가이 테이블이 (가) 포함에게 100000 행
지금field1 field2
이있는 경우에도 검사 수행 그래서 나는 field3을 포함하는 약 50 개의 행을 추가했다. (다른 행은 field3를 NULL로 갖는다.)
그래서 내가 선택한다
SELECT * FROM table WHERE field3 IN (val1, val2);
설명이 상당히 정상적입니다. 그것은 FIELD3에 인덱스를 사용하고, 단지 내가 IN 문
SELECT * FROM table WHERE field3 IN (val1, val2, val3, val4, val5, val6, val7, val8, val9, val10);
이 인덱스를 사용하지 끝에서 더 많은 값을 추가하지만 같은 2 행
를 검색하고 전체의 전체 테이블 스캔을 수행하는 끝 100000 개 이상의 행이 있습니다.왜 이렇게합니까? 나는 MySQL의 "If you need to access most of the rows, it is faster to read sequentially, because this minimizes disk seeks."
http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html
에서 것은 그러나 이것은 아마도
이유는 MySQL이이 일을한다 그 (10)의 값을 가져 오기 위해 인덱스를 사용하는 것보다 더 빠르게 할 수 없음을 알고 난 mysql을 지시 할 수있는 방법 인덱스를 사용하도록 강제로 전체 테이블 스캔을 수행하는 대신 ...
: 당신은 UNION과 함께 ALL 집합 연산자를 결합하여 재 작성 쿼리를 여러 건의 SELECT를 시도 할 수,
또는 어떤 스토리지 엔진 (InnoDB, MyISAM 또는?). MySQL의 인덱스 카디널리티 추정치가 예상했던 것과 다를 가능성이 있습니다. 통계는 MyISAM과 InnoDB에 의해 다르게 처리됩니다. [** myisam-index-statistics **] (http://dev.mysql.com/doc/refman/5.5/en/myisam-index-statistics.html) [** innodb-statistics-estim.html ** ] (http://dev.mysql.com/doc/refman/5.5/en/innodb-statistics-estimation.html) Optimizer는 [** index-hints **] 문에 포함 된 ** 힌트 **에 영향을받을 수 있습니다. ] (http://dev.mysql.com/doc/refman/5.5/en/index-hints.html). – spencer7593
InnoDB를 사용하고 있습니다. – pillarOfLight