mysql - 如何优化 MySQL 数据库/查询

标签 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;

journeyPattern2 表包含约 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'

我以前从未真正使用过这种大小的表,所以我不确定我是否首先正确加入。我还上传了 screenshot我对来自 phpmyadmin 的查询运行 EXPLAIN,但我不确定如何解释结果,因此我们将不胜感激。

感谢您的帮助。

最佳答案

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

  1. journeyPatternId 列的引用从 journeyPattern2 添加到 journeyPatternTimingLink2
  2. serviceId 列的引用从 service 添加到 journeyPattern2
  3. serviceId 列的引用从 service 添加到 line

journeyPatternTimingLink2 表中的 from 列上添加索引。

关于mysql - 如何优化 MySQL 数据库/查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13230629/

相关文章:

python - Django注释过滤外键的最小值和最大值

mysql - 在 MySQL 数据库中将数据存储为数字与字符串值

sql - 从 SQL 查询中获取产品

MySQL 可用性日历

sql - 从 SQL 表中查找不连续性

ios - 优化多个单元格的 CellForRow 方法

ios - 优化向 UIStackView 添加 View

mysql - SQL对列中的重复值进行分组

mysql 自动增量的正确类型是什么?

PHP+mysql : how to store big integers