【发布时间】:2015-08-26 11:46:27
【问题描述】:
我正在尝试将值与具有超过 1,000,000 行的同一个表进行比较。以下是我的查询,大约需要 25 秒才能得到结果。
EXPLAIN SELECT DISTINCT a.studyid,a.number,a.load_number,b.studyid,b.number,b.load_number FROM
(SELECT t1.*, buildnumber,platformid FROM t t1
INNER JOIN testlog t2 ON t1.`testid` = t2.`testid`
WHERE (buildnumber =1031719 AND platformid IN (SELECT platformid FROM platform WHERE platform.`Description` = "Windows 7 SP1"))
)AS a
JOIN
(SELECT t1.*,buildnumber,platformid FROM t t1
INNER JOIN testlog t2 ON t1.`testid` = t2.`testid`
WHERE (buildnumber =1030716 AND platformid IN (SELECT platformid FROM platform WHERE platform.`Description` = "Windows 7 SP1"))
)AS b
ON a.studyid=b.studyid AND a.load_number = b.load_number AND a.number = b.number
谁能帮我改进这个查询以获得足够快的结果? 这里的问题是即使我有 number 和 load_number 索引,查询也不使用它。我不知道为什么它总是被忽略..
谢谢。
【问题讨论】:
-
1) 看来您不需要两个子查询。只需将所有表连接在一起。 2) 不要使用 IN () ,这对 MySQL 来说会很慢。改用加入。 3) 不要在子查询中使用 *。
-
感谢您的评论,我已经为所有表格使用了联接,但它变得更糟了..如果我通过电子邮件发送给您,您可以玩这个表格吗?
-
你的
select太荒谬了。您正在选择六列,但只有三个值,基于on子句。 -
你可以先试试答案。如果问题仍然存在,请告诉我们。
-
是的,问题仍然存在..我想不通..
标签: mysql performance join