2014-03-05 1 views
0

2K 레지스터가있는 MySql 테이블 InnoDB 엔진이 있습니다. 처음 두 입력란은 id이고 INDEX KEY VARCHAR(255)codreg이라고하는 PRIMARY KEY (AUTO INCREMENT)입니다.기본 키 대 키 인덱스 속도

내 테이블이 인 경우에만 codreg이라고합니다.

문제는 새 구성에서 코 드그 (like)를 통한 검색이 유일한 코 드그 구성보다 느립니다.

기본 키 색인이 주요 색인보다 빠릅니까?

이 질문은 내가이 쿼리

SELECT CE.*, GI.* FROM ($_q_aux) CE inner join table2 GI ON GI.codreg=CE.codreg 

에게 $ _q_aux을 수행하는 데 성능 문제와 관련이있다 :

SELECT codreg FROM table2 WHERE codreg like '%string%' 

표 1은 2K 항목과 표 2 20K 항목입니다

실행 시간이 너무 느립니다.

+0

편집 해 주셔서 감사합니다. 누군가 도와 드릴 수 있습니까? – Hanzo

+0

당신이 사용하는 엔진을 말하지는 않았지만 대답은 - 예, PK는 일반 색인보다 "빠릅니다"입니다. 또한 'LIKE (거짓)'검색은 극히 비효율적이며 어떻게 실행했는지 (효율적이든 아니든간에) 의심 스럽습니다. PK에 대한 varchar를 사용하면 최상의 성능을 내지 못할 가능성이 큽니다. 검색 결과를 최대한 빨리 최적화 할 수 있습니다. 색인 없이도. 2k 항목은 MySQL에 대한 바다의 한 방울입니다. –

+0

InnoDb는 엔진입니다. 실제로 PK는 AUTO INCREMENT입니다. – Hanzo

답변

0

기본적으로 같은 것입니다. 하지만 진짜 문제는 PK에 varchar를 사용한다는 것입니다 - 왜? INT와 같은 정수 유형을 사용해야하며 성능이 크게 향상됩니다.

실제로이 열을 varchar로 지정해야하는 경우 먼저 알고있는 필드의 길이를 정확히 알고 있는지 확인한 다음 char (6)을 사용해야합니다.

LIKE 검색시 마지막 위치에 "%"만 입력하면 검색 속도가 빨라지며 그렇지 않으면 모든 행이 검색됩니다. 그래서 "123 %"와 같은 "123 %"와 같은 코덱을 사용할 수 있다면

+0

당신은 유효하거나 잘못된 조언을 혼합하고 있습니다. 그래서 내가 downvote 또는 upvote하지 않았다. 그러나 당신이 틀린 곳은 "기본적으로 같은 것"입니다. 예, 숫자 또는 문자열 색인 생성은 똑같은 깊이로 깊게 내려갑니다. 하지만 인덱스 구조가 물리적으로 어떻게 구성되어 있는지 (InnoDB와 TokuDB에서) 차이가 있습니다. 차이가있는 곳과 PK가 다른 유형의 색인 (클러스터되지 않은 경우)에 비해 항상 더 빠른 속도를 제공하는 이유입니다. –

+0

원래 질문에 새로운 정보가 추가되었습니다. – Hanzo

+0

'string %'을 사용하려고 시도했지만 성능이 향상되지 않습니다. 쿼리를 "SELECT %. *, GI. * FROM ($ _q_aux) CE inner '와 같이 사용하면 성능이 좋지만 문제가 발생합니다. table2 GI에 가입하십시오 ..codreg = CE.codreg "... 어떤 문제를 해결할 것입니까? 감사 – Hanzo