在我的SQLite数据库中,每个表中都有一个sync_id
列。我经常想为每个表检索最大的sync_id
。这是我首先尝试的方法:
SELECT
MAX(answer.sync_id),
MAX(community.sync_id),
MAX(question.sync_id),
MAX(topic.sync_id)
FROM
answer,
community,
question,
topic;
这个查询花了很长时间,实际上我一直没有结束。
这是我接下来尝试的方法:
SELECT "answer" AS name, MAX(answer.sync_id) AS max_sync_id FROM answer
UNION SELECT "community" AS name, MAX(community.sync_id) AS max_sync_id FROM community
UNION SELECT "question" AS name, MAX(question.sync_id) AS max_sync_id FROM question
UNION SELECT "topic" AS name, MAX(topic.sync_id) AS max_sync_id FROM topic;
这非常快,给了我预期的结果。
我对此有2个问题:
name
列以保留上下文。有没有办法以第二查询的速度获取第一查询的结果集?答案 0 :(得分:1)
因为第一个在对它运行select
之前将一个大表作为4个表的笛卡尔积,而第二个对每个表激发1个请求,然后将结果汇总为4行。这两个请求的执行计划都可以详细显示。
不。这是因为您的数据的性质:看来您的4个表无论如何都不相关,因此您不能有一个(快速)请求就可以全部击中它们。最好的办法可能是发出4个请求,然后将结果分组到您的应用程序中。