【发布时间】:2014-01-22 20:03:13
【问题描述】:
我将首先描述我的情况,以便使以下问题尽可能清楚。
为简单起见,假设我在 MySQL 数据库 (InnoDB) 中有一个表,其中包含有关狗的记录,结构如下:
dog_id (PK) | dog_name
表中有 10,000,000 行(每行代表一条唯一的狗),并在 dog_name 列上建立索引。
我的程序搜索我需要处理的 vets 记录。每条记录都以某种方式与一只狗相关联,每条狗大约有 100 条记录。我想找到尚未插入数据库的狗。
这意味着连续 100 次正在处理的记录可能是关于已经在数据库中的狗,因此不必将狗添加到数据库中。但有时会发生(如前面提到的 1:100 比例)我需要将一只狗添加到数据库中,因为这是程序第一次处理关于狗的记录。 (我希望这个例子能说明我的情况)
我的问题是: 如何验证狗还没有被插入数据库最有效的方法是什么?
- 将所有狗的名字(假设世界上所有的狗都有唯一的名字)加载到程序(一个集合)的内存中,并检查狗是否在集合中。当它在集合中时,我跳过记录,当它不在时,我插入狗。
- 将列定义为 UNIQUE 并尝试插入所有记录。当因为唯一性而出现数据库错误时,我就跳过狗继续。
- 每次处理记录时查询数据库以查明狗是否在数据库中,如果在数据库中,则跳过该记录,如果不在,则将狗插入表中。
尽可能多地为您提供信息。我使用 Python、SqlAlchemy、MySQL、InnoDB。
【问题讨论】:
标签: python mysql database performance