こんにちは、データベースを最適化する方法について、1 年もかからないように助けてもらいたいと思っていました。高速化するにはインデックスを追加する必要があることはわかっていますが、何に追加すればよいか正確にはわかりません。
私のデータベースの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;
テーブル tourPattern2 には約 33000 行が含まれ、journeyPatternTimingLink2 には約 1300 万行が含まれ、回線とサービスは約 70000 行含まれています。
最適化しようとしているクエリは次のとおりです
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'
これまでこのサイズのテーブルを実際に扱ったことがないので、そもそも正しく結合しているかどうかわかりません。phpmyadmin からのクエリで EXPLAIN を実行しているスクリーンショットもアップロードしましたが、結果を解釈する方法が正確にはわからないので、助けていただければ幸いです。
ご協力いただきありがとうございます。