【发布时间】:2023-04-10 14:48:02
【问题描述】:
我正在尝试在 python 中比较 sqlite3 数据库中的两个表。这个问题的答案之一:
Comparing two sqlite3 tables using python
给出一个解决方案:
或者,将它们导入 SQLite 表。然后您可以使用如下查询:
SELECT * FROM a INTERSECT SELECT * FROM b;
SELECT * FROM a EXCEPT SELECT * FROM b;获取同时存在于两个表中的行,或仅存在于一个表中的行。
这对于少于一百万行的表非常有效,但对于我需要比较超过一百亿行的表的程序来说太慢了。 (仅 1 亿行脚本就用了十多分钟。)
有没有更快的方法在 python 中比较两个 sqlite3 表?
我曾想过尝试比较两个数据库文件的哈希值,但一个名为 dbhash on sqlite.org 的程序的概述声称,即使两个数据库文件的内容相同,某些操作“也可能导致对原始数据库文件,因此会在文件级别导致非常不同的 SHA1 哈希”,这让我认为除非我运行某种脚本以有序方式查询所有数据然后对其进行哈希处理(如 dbhash程序可以),但这会更快吗?
或者我应该完全使用另一个可以比 sqlite3 更快地进行比较的数据库吗?
任何想法或建议将不胜感激。
编辑:到目前为止已经提出了一些好主意,但要澄清一下:表格的顺序无关紧要,只是内容。
【问题讨论】:
-
减去将数据加载到 SQLite 数据库所需的时间,我希望在数据库中运行的比较比在 Python 代码中运行得更快。
-
你能告诉你为什么需要那个吗?如果您想同步 dbs,请查看 litesync 或 litereplica。它们的速度要快得多。
-
@BernardoRamos 是的,我实际上是在尝试在多个不同节点之间同步信息,所以这看起来很有希望,谢谢。
-
your 数据库是否有主键?这将允许更有效的查找。
-
@CL。是的,确实如此。
标签: python sql database sqlite