我的SQL查询需要多长时间?

时间:2010-07-05 08:17:12

标签: sql sqlite

我在SQLite Administrator中有一个数据库,有3个表,比如A,B和C.

表A有3列p1,p2和p3,约有2百万行 表B有2列p1和p4,也有大约200万行 表C具有1列p4,具有约800,000行。

我尝试运行的查询如下:

SELECT A.p1, B.p4, A.p2, A.p3
FROM A,B,C
WHERE A.p1=B.p1 AND B.p4=C.p4

查询已经花了3天时间,但仍未完成。我想知道我是应该中止还是等到它完成。如果它会在接下来的5-6天内完成,我可能会等待,但如果需要更多,我将不得不中止它。

我应该等不及?

我的电脑规格如下: Core 2 duo 1.86GHz,2 GB RAM,

2 个答案:

答案 0 :(得分:2)

我想说3天内没有什么奇怪的事(如果没有索引)。

如果A,B,C上没有索引,那么您的查询将对A x B x C进行全面扫描。 A x B x C中的记录数是

SELECT COUNT(*)
FROM A,B,C

(2*10^6) * (2*10^6) * (0.8*10^6) = 3.2 * 10^18

假设您可以在一秒钟内将where条件应用于十亿条记录,那么您仍然需要3.2 * 10 ^ 9秒。这已经超过101年了。

但是,如果您在p1和p4上有索引,那么RDBMS将能够直接访问结果而不扫描完整的笛卡尔积(嗯,我认为某些DB会选择构建临时索引,这仍然会很慢,但会使查询实际执行。)

答案 1 :(得分:0)

你有A.p1,B.p1,B.p4,C.p4的索引吗? 如果没有,那么你最好停止它,它可能会运行几年。

对于这种操作,你需要更大的东西。这根本不是精简版。考虑切换到另一个RDBMS。