안녕하세요. 데이터베이스를 최적화하는 방법에 대한 도움을 받으실 수 있기를 기대하면서 일년이 걸리지 않으 셨습니다. 속도를 높이기 위해 색인을 추가해야하지만 정확히 무엇을 추가해야하는지 잘 모르겠습니다.MySQL 데이터베이스/쿼리를 최적화하는 방법
는 Heres는 내 데이터베이스에있는 3 개 개의 테이블 :
CREATE TABLE IF NOT EXISTS `journeyPattern2` (
`journeyPatternId` int(11) NOT NULL AUTO_INCREMENT,
`serviceId` int(11) NOT NULL,
`direction` enum('inbound','outbound') NOT NULL,
PRIMARY KEY (`journeyPatternId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
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`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS `line` (
`lineId` int(11) NOT NULL AUTO_INCREMENT,
`serviceId` int(11) NOT NULL,
`lineName` tinytext NOT NULL,
PRIMARY KEY (`lineId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS `service` (
`serviceId` int(11) NOT NULL AUTO_INCREMENT,
`serviceCode` varchar(50) NOT NULL,
`registeredOperatorRef` varchar(50) NOT NULL,
`origin` tinytext NOT NULL,
`destination` tinytext NOT NULL,
PRIMARY KEY (`serviceId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
journeyPattern2 약 33000 행을 포함하는 테이블은 journeyPatternTimingLink2은 약 70000.
쿼리 내가 노력하고있어 1300 만, 라인 및 서비스를 포함 최적화는 다음과 같습니다
SELECT DISTINCT lineName,line.serviceId FROM `journeyPatternTimingLink2`
INNER JOIN journeyPattern2
ON journeyPattern2.journeyPatternId=journeyPatternTimingLink2.journeyPatternId
INNER JOIN line
ON journeyPattern2.serviceId = line.serviceId
WHERE `from` = '13006785E'
나는이 크기의 테이블을 실제로 사용하지 못했습니다. 그래서 저는 제가 c에 합류하는지 확실하지 않습니다. 제 1 장소에서 orrectly. 또한 screenshot을 phpmyadmin의 쿼리에 EXPLAIN을 실행하여 업로드했습니다. 그러나 결과를 해석하여 어떤 도움을 받으실 지 확신 할 수 없습니다.
도움 주셔서 감사합니다.
첫째, 귀하의 질문이 정말로 느리거나 사전에 최적화하고 싶습니까? –
그래, 내가 위의 게시물을 실행하는 데 매우 느린, 50 초. – Jack
당신의 explain 회담이 journeyPattern2의 330141 행에 대해 말했고, 위에서 33000 행은 맞습니까? –