2012-11-06 4 views
4

MySQL 데이터베이스에서 두 테이블을 조인하려하지만 두 번째 테이블에서 기본 키를 사용하지 않는 것 같습니다. 내가 잘못 쿼리했거나 기본 키를 사용할 수없는 경우 어떻게 추가 최적화 할 것인지 잘 모르겠습니다. 현재 쿼리를 실행하는 데 20 초 가량 소요됩니다. 다음과 같이MySQL 쿼리 속도를 높이는 방법

SELECT * FROM journeyPatternTimingLink2 INNER JOIN stops ON stops.atcoCode = journeyPatternTimingLink2.from WHERE journeyPatternId = '113958' 

내 테이블 구조는 다음과 같습니다 :

CREATE TABLE IF NOT EXISTS `journeyPatternTimingLink2` (
    `journeyPatternTimingLinkId` int(11) NOT NULL AUTO_INCREMENT, 
    `journeyPatternId` int(11) NOT NULL, 
    `from` varchar(15) NOT NULL, 
    `to` varchar(15) NOT NULL, 
    `direction` enum('inbound','outbound') NOT NULL, 
    `runTime` varchar(15) NOT NULL, 
    PRIMARY KEY (`journeyPatternTimingLinkId`), 
    KEY `journeyPatternId` (`journeyPatternId`), 
    KEY `from` (`from`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=13652793 ; 

-- 
-- Table structure for table `stops` 
-- 

CREATE TABLE IF NOT EXISTS `stops` (
    `atcoCode` varchar(25) NOT NULL, 
    `longitude` varchar(30) NOT NULL, 
    `latitude` varchar(30) NOT NULL, 
    PRIMARY KEY (`atcoCode`), 
    KEY `location` (`longitude`,`latitude`), 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

그리고 마지막으로 여기 a screenshot me running explain on the query있어

내가 실행 해요 쿼리입니다. 스톱 테이블에 어떤 종류의 색인이 사용되는 것을 보지 않아야합니까?

감사합니다.

+0

테이블의 열 이름에 FROM 및 TO를 사용하지 않습니다. 이는 이들이 MySQL의 키워드이며 쿼리에 문제를 일으킬 수 있기 때문입니다. –

답변

5

두 필드는 서로 다른 문자 집합을 사용합니다.

두 테이블 모두 UTF8을 사용합니다.

+0

잘 발견되어 완벽하게 작동합니다. 그것이 문제를 일으킬 것임을 깨닫지 못했습니다. 나는 할 수있을 때 받아 들일 것이다. – Jack

0

테이블 조회 속도를 높이기 위해 각 테이블의 FROM 및 TO 열에 "인덱싱"을 사용할 수도 있습니다.

CREATE INDEX indexFrom on journeyPatternTimingLink2 (from);

CREATE INDEX indexAtcoCode on stops (atcoCode);

+0

나는 from에서 이미 색인을 얻었고 atcoCode는 기본 키이므로 이미 색인이 생성되었습니다. – Jack

+0

My Bad! 나는 그 부분을 놓쳤다. –

관련 문제