如何优化MySQL数据库/查询

Jac*_*ack 1 mysql sql optimization database-indexes

嗨,我希望我能得到一些关于如何优化我的数据库的帮助,所以它不需要一年.我知道要加快速度,我需要添加索引,但我不确定我应该添加它们.

继承我数据库中的三个表:

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;
Run Code Online (Sandbox Code Playgroud)

table journeyPattern2包含大约33000行,journeyPatternTimingLink2包含大约1300万行,而line和service大约包含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'
Run Code Online (Sandbox Code Playgroud)

我从来没有真正使用过这种尺寸的桌子,所以我不确定我是否正好加入了.我还上传了我在phpmyadmin的查询上运行EXPLAIN 的截图,但我不确定如何解释结果,所以任何帮助将不胜感激.

谢谢你的帮助.

Sah*_*hah 5

您必须在下面提到的列上添加一些外键索引:

  1. 添加引用jouurneyPatternId列从journeyPattern2journeyPatternTimingLink2
  2. 添加引用serviceId列从servicejourneyPattern2
  3. 添加引用serviceId列从serviceline

fromjourneyPatternTimingLink2表中的列上添加索引.