我有两个表A和B(名称是抽象的)。表A和表B都有一个名为date的列。表A有大约300万行,列日期已编入索引。表B有大约100万行。
我有以下查询运行得非常慢(大约20秒):
SELECT * FROM A WHERE A.date > (select MAX(date) FROM B)
但是,如果我先单独运行子查询,那么速度非常快。如果我将日期替换为主查询,它也会超快,因为表A中的数据被索引。
我已经看到如果使用“IN”子句,这可能是一个问题。但我的查询不使用IN。有人可以帮助解释为什么这么慢吗?
谢谢!
答案 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中的索引也可以节省很多秒