Mysql连接查询优化

标签 mysql sql join query-optimization

我在 mysql 中有两个表:

Results Table : 1046928 rows.
Nodes Table :  50 rows.

我用下面的查询连接这两个表,查询的执行速度非常非常慢。

select res.TIndex, res.PNumber, res.Sender, res.Receiver, 
sta.Nickname, rta.Nickname from ((Results res join 
Nodes sta) join Nodes rta) where ((res.sender_h=sta.name) and
(res.receiver_h=rta.name));

请帮我优化这个查询。现在,如果我只想拉出前 5 行,大约需要 5-6 分钟。谢谢。

CREATE TABLE `nodes1` (
  `NodeID` int(11) NOT NULL,
  `Name` varchar(254) NOT NULL,
  `Nickname` varchar(254) NOT NULL,
  PRIMARY KEY (`NodeID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `Results1` (
  `TIndex` int(11) NOT NULL,
  `PNumber` int(11) NOT NULL,
  `Sender` varchar(254) NOT NULL,
  `Receiver` varchar(254) NOT NULL,
  `PTime` datetime NOT NULL,
  PRIMARY KEY (`TIndex`,`PNumber`),
  KEY `PERIOD_TIME_IDX` (`PTime`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

最佳答案

SELECT  res.TIndex ,
        res.PNumber ,
        res.Sender ,
        res.Receiver ,
        sta.Nickname ,
        rta.Nickname
FROM    Results AS res
        INNER JOIN Nodes AS sta ON res.sender_h = sta.name
        INNER JOIN Nodes AS rta ON res.receiver_h = rta.NAME
  1. 为结果创建索引 (发件人_h)
  2. 在结果 (receiver_h) 上创建索引
  3. 创建索引 在节点上(名称)

关于Mysql连接查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5905686/

相关文章:

mysql - 详细的 RoR 应用程序...带有 MySQL 的 XML 或仅 MySQL

mysql - 选择最近一天的行

mysql - 优化MySQL中的多对多查询

php - Symfony2 与学说 : Nested conditions for findBy

mysql - 从两个不同的表中选择两个字段作为一个(使用联接)(MYSQL)

php - 通过php/json从数据库获取数据

MySQL - 在多个没有关系的表上使用 FIND_IN_SET

mysql - 用于将数据从 Azure MSSQL 复制到 Azure MySQL 的 Azure 管道复制数据事件

sql - 如何在 SQL Reporting 2008 R2 中使用变量

MySQL仅在第一行右行加入左行