如何加速MySQL查询

4
我正在尝试在MySQL数据库中连接两个表,但似乎没有使用第二个表的主键。我不确定是查询方式有误还是主键无法使用,需要进一步优化。目前查询需要20秒才能运行。
我运行的查询语句是:
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;


最后,这是我在查询上运行explain的截图(在此查看)。我不应该看到一些在stops表上使用的索引吗?
谢谢。

我不会在你的表中使用FROM和TO作为列名,因为它们是MySQL中的关键字,会导致查询出现问题。 - nathan hayfield
2个回答

5

您的两个字段使用不同的字符集。

请使两个表都使用UTF8


非常好,运行得很完美。我没有意识到那会引起问题。我会在可以的时候接受它。 - Jack

0

жӮЁиҝҳеҸҜд»ҘеңЁеҗ„иҮӘзҡ„иЎЁдёҠзҡ„FROMе’ҢTOеҲ—дёҠдҪҝз”ЁвҖңзҙўеј•вҖқжқҘеҠ йҖҹиЎЁжҹҘжүҫгҖӮ

CREATE INDEX indexFrom on journeyPatternTimingLink2(from);

CREATE INDEX indexAtcoCode on stops(atcoCode);


我已经在“from”上有一个索引,而atcoCode是一个主键,因此它已经被索引了。 - Jack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接