嗨我希望我可以得到一些關於如何優化我的數據庫,所以它不需要一年的幫助。我知道要加快速度,我需要添加索引,但我不確定我應該添加哪些內容。如何優化MySQL數據庫/查詢
繼承人在我的數據庫中的三個表:
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包含約13萬,而線和服務,我身邊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'
我從來沒有真正與這個大小的表之前,所以我不知道如果我加入c正確地擺在首位。我也上傳了一個運行EXPLAIN的screenshot來自phpmyadmin的查詢,但我不確定如何解釋結果,所以任何幫助將不勝感激。
感謝您的幫助。
首先,你的查詢是否真的很慢,或者你想提前優化? –
是的,它非常緩慢,50秒運行我上面發佈的內容。 – Jack
你的解釋是關於在journeyPattern2中330141行的解釋,在你說的33000行之上,這是正確的嗎? –