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

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

表A具有3列p1,p2和p3,具有约2百万行.
表B有2列p1和p4,也有大约2百万行.
表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天内完成,我可能会等待,但如果需要更多,我将不得不中止它.

我应该等不及?

我的PC规格是:
Core 2 duo 1.86GHz,2 GB RAM,

最佳答案 我会说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会选择构建临时索引,这仍然会很慢,但会使查询实际执行).

点赞