Python性能:大列表搜索 vs sqlite

2 投票
4 回答
2903 浏览
提问于 2025-04-16 02:17

假设我有一个数据库表,这个表有三列:idfield1field2。这个表里可能有100到100,000行数据。我有一个Python脚本,应该往这个表里插入10到1,000行新数据。但是,如果新的field1已经在表里存在,就应该执行UPDATE操作,而不是INSERT

那么,下面哪种方法更高效呢?

  1. 先执行一个SELECT field1 FROM tablefield1是唯一的),把结果存到一个列表里。然后,对于每一行新数据,使用list.count()来判断是要INSERT还是UPDATE
  2. 对于每一行,执行两个查询。首先,SELECT count(*) FROM table WHERE field1="foo",然后再决定是INSERT还是UPDATE

换句话说,是执行n+1个查询并在列表中搜索更高效,还是执行2n个查询让sqlite来搜索更高效呢?

4 个回答

0

我想用Python的字典来查找东西会比用Python的列表快得多。(只需要把值设为0,实际上你并不需要这些值,希望0能节省空间。)

至于更大的问题,我也很好奇。:)

1

我对sqlite不太熟悉,但一般来说可以这样处理:

如果在field1上有一个唯一索引,也就是说这个字段的值不能重复,那么当你试图插入一个已经存在的值时,系统应该会报错。如果插入失败了,那就可以选择更新这个值。

伪代码:

try
{
    insert into table (value1, value2)
}
catch(insert fails)
{
    update table set field2=value2 where field1=value1
}
9

如果我理解你的问题没错的话,听起来你可以直接使用SQLite自带的冲突处理机制。

假设你在field1字段上设置了唯一性约束,你可以简单地使用:

INSERT OR REPLACE INTO table VALUES (...)

以下的语法也是可以的(效果是一样的):

REPLACE INTO table VALUES (...)

编辑:我意识到我并没有真正回答你的问题,只是在提供一个可能更快的替代方案。

撰写回答