2010-02-14 1 views
2

임피던스는 MySQL의 인덱스와 매우 혼동됩니다.MySQL에서 인덱스를 사용하는 조인이있는 2 세트의 indentical 테이블. 하나는 풀 테이블 스캔이 필요합니다.

두 테이블이 있습니다 : TableA1과 TableA2.

그들 사이에 조인을위한 인덱스를 생성했는데 쿼리가 정말 빠르게 실행됩니다.

동일한 설정을 가진 또 다른 2 개의 테이블이 있습니다. TableB1 및 TableB2. 유일한 차이점은 이러한 테이블에 몇 가지 null 값이 있다는 것입니다.

TableA에서 동일한 쿼리가 약 5 배 빠르며 전체 테이블 스캔이 필요하지 않습니다. TableB 그러나 전체 테이블 스캔을 사용하는 것 그리고 나는 왜 작동하지 않을 수 있습니다. 이것을 일으키는 Null 값이 될 수 있습니까?

TableA 설정에서 EXTERNAL을 사용하면 possible keys: myindexref: func이 나옵니다. 그러나 TableB 설정에서 나는 단지 possible keys: NULLref: NULL을 얻습니다.

나는 이것에 대해 꽤 오래 검색했으며 관련 답변을 찾을 수없는 것으로 보입니다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 감사하겠습니다.

(죄송합니다, 이제 원래의 질문에 추가됩니다.) 여기

가 TableAOne입니다 :

CREATE TABLE `TableAOne` (
    `field1` varchar(255) DEFAULT NULL, 
    `field2` varchar(255) DEFAULT NULL, 
    KEY `myindex` (`field1`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

그리고 TableATwo : 나는 필드 1과 입력란 3에 합류하고

CREATE TABLE `TableATwo` (
    `Field3` varchar(255) , 
    `Field4` varchar(255) , 
    `Field5` varchar(255) , 
    `id` int(20) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=15522 DEFAULT CHARSET=utf8; 

.

전체 테이블 검색을 수행하는 테이블은 위의 테이블과 동일합니다. 유일한 차이점은 TableA 대신 TableB가 호출된다는 것입니다.

건배,

+1

테이블 생성 스크립트와 각 테이블의 행 수를 게시 할 수 있습니까? –

+1

'NULL'은 B 테이블을 연결하는 유효한 값입니까? 그렇지 않다면, JOIN criteria에'AND b2.col IS NOT NULL'을 사용하고, WHERE b1.col IS NOT NULL'을 사용하여 제외 시키십시오. –

+0

yep null은 유효한 값입니다. 빈 값도 있습니다. 현명한!), null 값과 빈 테이블을 유지하고 싶습니다. 잠시 후에 테이블을 게시합니다. –

답변

0

난 그냥 테이블과 삭제 된 DB에 재를 설치 (내가이 차이를 만들어 확실하지 latin1에로 변경 UTF8을했다) 그러나 지금은 작동, 정말 이상한! 덕분에 많은 응답들에 대해 많은 응답을 보냈습니다. 분명히 저를 답장으로 밀어 줬습니다.

+0

그것은 문제를 일으키는 utf8 대 latin1 문자 집합으로 밝혀졌습니다. –