我下载了一个很大的加载文件。其中包含我必须加载到数据库中的记录。根据数据的大小,可能需要2周或更长时间才能完成(因为需要进行预处理等)。一位同事让我做一个她称之为增量文件的东西,它根据数据库中的某个字段检查当前数据库,看看数据是否已经存在,如果它存在,我们将把它保存在加载文件中,否则我们将丢弃它。
我很困惑,因为要实现这一点,我需要对加载文件中的每个文件执行select查询,以检查它是否存在。我假设一次select需要O(n)。然后插入(对于较小的数据集)一个额外的O(1)。
而插入只需要O(1)。
我想1)理解为什么这个实现更快(如果我不能正确理解的话)和2)如果你能想出比我建议的更聪明的方法来实现这个增量文件的一个可能的解决方案
谢谢
发布于 2020-09-07 20:40:43
数据库为模式中指定的列建立索引。对数据进行索引的方式会在性能上产生巨大的差异。在没有索引的情况下,select操作可能是O(n),但是有了索引,它可能是O(1)。
Insert操作必须维护索引。对于大型数据加载操作,您可以禁用索引,直到操作结束,这样您就可以对所有数据执行一次索引更新,而不是对您插入的每条记录执行多次索引更新。
我前几天做的一些测量表明,在我的情况下,selects比inserts更快。我之所以遇到这个问题,是因为我想知道这是不是普遍正确,还是反映了我设置它的方式的某些具体情况。
https://stackoverflow.com/questions/42819577
复制相似问题