选择比插入更快

时间:2017-03-15 20:00:12

标签: mysql database time-complexity

我有一个我下载的大文件。这包含我必须加载到数据库中的记录。根据数据的大小,可能需要2周或更长时间才能完成(因为有预处理等)。一位同事让我做了她所谓的delta文件,它检查当前数据库,看看数据是否已经存在,基于数据库中的某个字段而IFF存在然后我们将其保存在加载文件中,否则我们将放弃它。

我感到困惑,因为为了实现这一点,我需要对加载文件中的每个文件执行一个select查询,以检查它是否存在。选择将采用O(n)I&m;假设。然后插入(对于较小的数据集)另外的O(1)。

而插入只需要O(1)。

我想1)理解为什么这个实现更快(如果我不能正确理解事情)和2)如果你能想到比这更好的东西,可能的解决方案来实现这个delta文件我的建议

由于

1 个答案:

答案 0 :(得分:0)

数据库为模式中指定的列创建索引。索引数据的方式可能会在性能上产生巨大差异。没有索引,选择操作可能是O(n),但是有了索引,选择操作可能是O(1)。

插入操作必须维护索引。对于大型数据加载操作,您可以完全禁用索引直到结束,因此您将对所有数据执行单个索引更新,而不是对插入的每个记录进行多次索引更新。

前几天我进行的一些测量表明,在我的情况下,选择比插入要快。我遇到了这个问题,因为我试图了解这通常是正确的还是反映了我设置它的方式的某些具体信息。