질문을 삭제하지 말아주세요.!
 
1
0
-1

A 라는 테이블은 itemId로 primaryKey로 잡혀 있습니다.

MyISAM 이구요

B 라는 테이블은 primaryKey가 다르지만 itemId로 index가 걸려 있습니다. 인덱스 이름도 itemId이고,

index type 은 Normal이고, index method는 btree 입니다. 테이블 형식은 같은 MyISAM 입니다.

B라는 테이블을 기준으로하고 A라는 테이블을 left outer join을 시키고 explain을 하면 a 테이블 index type으로 eq_ref가 나오고, key는 primary로 잡힙니다.


여기 까진 문제가 없습니다.

문제가 되는 부분은 바로 지금부터인데

C라는 테이블이 있습니다. 테이블형식은 InnoDB구요, B테이블과 마찬가지로 primary key는 다른 컬럼이지만 itemId 컬럼이 있고 index를 만들었습니다.(B테이블과 인덱스 형식은 같습니다.)

C 테이블을 기준으로하고 A라는 테이블을 left outer join을 시키고 explain을 하면 a테이블이 인덱스를 타지 않는데요... 같은 형식의 컬럼이 있는데 왜 B와 C 테이블이 explain 결과가 다르게 나올까요?

제가 제대로 설명한게 맞을까요?

다른건 테이블 형식인 InnoDB, Row Format, Default Character set, default Collation 등이 다르긴 하지만 B 테이블과 똑같이 맞춰도 결과는 같습니다.  MyISAM으로 고치고 나머지도 다 B 테이블과 똑같이 맞췄는데도 인덱스를 타지 않습니다.

어떤것을 더 확인해 볼 수 있을까요?


추가로 itemId는 varchar 형태입니다. notnull 입니다.

    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      자답입니다..

      일단 innoDB , MyISAM 등의 문제는 아니였구요

      해당 C테이블의 itemId 컬럼의 charaterSet이 utf8mb4로 설정되어있었습니다.

      바꾸니 인덱스를 타네요

      수고하세요~

        CommentAdd your comment...