MySQL

时间:2015-12-04 03:08:20

标签: mysql sql subquery database-performance sqlperformance

我有两个表A和B(名称是抽象的)。表A和表B都有一个名为date的列。表A有大约300万行,列日期已编入索引。表B有大约100万行。

我有以下查询运行得非常慢(大约20秒):

SELECT * FROM A WHERE A.date > (select MAX(date) FROM B)

但是,如果我先单独运行子查询,那么速度非常快。如果我将日期替换为主查询,它也会超快,因为表A中的数据被索引。

我已经看到如果使用“IN”子句,这可能是一个问题。但我的查询不使用IN。有人可以帮助解释为什么这么慢吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

将子查询作为派生表移动到from子句中,并将其连接到表A而没有连接条件:

SELECT * FROM A, (select MAX(date) AS mdate FROM B) AS T WHERE A.date > T.mdate

通过这种方式,您可以确保子查询仅计算一次。如果A.date在您编写时已编入索引,则应加快查询速度。在当前表单中,我相信子查询是分别为每个记录执行的。

答案 1 :(得分:0)

单独<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/> 多少次?

如果您的 B .date中的索引也可以节省很多秒