4

MySQLデータベースの2つのテーブルを結合しようとしていますが、2番目のテーブルの主キーを使用していないようです。クエリが間違っているのか、主キーを使用できないのか、さらに最適化する方法がわかりません。現在、クエリの実行には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を実行しているスクリーンショットを示します。ストップテーブルで何らかのインデックスが使用されているのを見るべきではありませんか?

ありがとう。

4

2 に答える 2

5

2つのフィールドは異なる文字セットを使用します。

両方のテーブルでを使用しますUTF8

于 2012-11-06T21:07:31.897 に答える
0

また、それぞれのテーブルのFROM列とTO列で「インデックス作成」を使用して、テーブルの検索を高速化することもできます。

journeyPatternTimingLink2(from);のCREATE INDEX indexFrom

ストップのCREATEINDEXindexAtcoCode(atcoCode);

于 2012-11-07T03:11:13.273 に答える