은 다음과 같이 테이블을 만듭니다쿼리 최적화
CREATE TABLE test (a INT(10), b char(10));
두 개의 인덱스를 추가 :
alter table test add key aa (a), add key bb (b);
가 일부 행 삽입 :
insert into test values (132,'logi');
insert into test values (322,'koko');
insert into test values (32,'kola');
등 ...
적은 수의 행으로 테스트 할 수 있습니다. 는 그래서, 나는 두 개의 쿼리를 실행하려는 가정 해 봅시다 :
1) explain select * from test where b like "frif%";
2) explain select * from test where a like "32%";
첫 번째를 B부터 BB 인덱스를 사용하지만 내 응용 프로그램에서 나는 그래서 내가 물어려고하는 것은 의미가 만드는 행 억이있을 것이다 는 char이며, 두 번째는 aa를 사용하지 않는 반면, a는 int 일 뿐이며 char처럼 취급합니다. 어떻게 두 번째 쿼리를 첫 번째로 실행하고 "some_number %"와 같은 숫자를 검색하여 ALL이 아닌 범위 유형의 쿼리로 만들 수 있습니까 (설명대로).
INT가의 문자열로 변환 작동 안함. –
아마도 A에 대한 함수 기반 인덱스가 문자 데이터로 캐스팅되었습니다. 이로써 엔진이 사용할 인덱스가 생성됩니다. – xQbert
xQbert, 나는 CAST 함수로 제안한 것을하려고했지만 다음과 같은 것을 시도했다. (설명) select * from test where "32 %"와 같은 캐스트 (a CHAR); 작동하지 않습니다! –