Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的SQL查询需要多少时间?_Sql_Sqlite - Fatal编程技术网

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

我的SQL查询需要多少时间?,sql,sqlite,Sql,Sqlite,我在SQLite Administrator中有一个数据库,有3个表,比如a、B和C 表A有3列p1、p2和p3,大约有200万行。 表B有两列p1和p4,也有大约200万行。 表C有1列p4,其中约有800000行 我尝试运行的查询如下所示: 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天内完成,我可能

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

表A有3列p1、p2和p3,大约有200万行。
表B有两列p1和p4,也有大约200万行。
表C有1列p4,其中约有800000行

我尝试运行的查询如下所示:

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,

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


对于这种操作,你需要更大的东西。这一点也不简单。考虑切换到另一个RDBMS。

我会说3天内没有什么奇怪的事情(如果没有索引的话)

如果A、B、C上没有索引,那么您的查询将对A 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将能够直接访问结果,而不扫描完整的笛卡尔积(我认为有些数据库会选择构建临时索引,这仍然很慢,但会使查询实际执行).

我猜你还没有在表格上添加任何索引?我想这对SO来说很难回答。作为DBA(或DB程序员),您的职责之一是了解系统的性能特征。涉及的变量太多了,我们对此一无所知:索引、虚拟内存、磁盘空间、磁盘速度、键。。。但是,既然你准备再等6天,为什么不等一下呢?嗯,似乎没有索引,磁盘空间应该足够(大约10GB可用),磁盘速度。。5800RPM,如果这是你的意思。我会等6天,但我担心这个查询是否会花费更多的时间。我不确定索引。我不是自己创建的,但也许sqlite是自动创建的?我通过从文本文件导入数据创建了表。当然没有创建索引。不会自动创建索引。主键、外键、唯一键、索引。。。所有这些都必须手动定义。你认为mySQL会比SQLite快得多吗?首先尝试在SQLite中创建索引这是FirebirdSQL嵌入式服务器的工作。虽然它仍然比FirebirdSQL超级服务器慢,后者比PostgreSQL、Oracle和Microsoft SQL Server慢,但仍然比MySQL快。我明白了!我想我会先中止查询并创建索引。我创建了索引并再次运行它。。。它在49秒内完成。谢谢,StackOverflow)