我有一个数据库,我用自动生成的索引键存储一些值。我也有一个像这样的n:m映射表:
create table data(id int not null identity(1,1), col1 int not null, col2 varchar(256) not null);
create table otherdata(id int not null identity(1.1), value varchar(256) not null);
create table data_map(dataid int not null, otherdataid int not null);
每天data
表都需要使用新值列表进行更新,其中很多值已经存在,但需要插入data_map
({{1}中的键然后生成,所以在这个表中数据总是新的。)
这样做的一种方法是先尝试插入所有值,然后选择生成的id,然后插入otherdata
:
data_map
但这显然是非常糟糕的,因为我需要在不使用密钥的情况下选择所有内容,而且我需要在不使用密钥的情况下进行检查,因此我首先需要索引数据,否则一切都很慢。
我的下一个方法是使用散列函数(如md5或crc64)在col1和col2上生成我自己的散列,以便能够在不使用select的情况下插入所有值,并且在插入缺失值时能够使用索引键
这可以优化还是我能做的最好的事情? 线的数量是每次更改> 500k,其中可能约20-50%已经在数据库中。 时间方面看起来计算哈希比将数据插入数据库要快得多。
答案 0 :(得分:-1)
就我而言,你使用mysql.connector。如果是,当你运行cursor.execute()时,你不应该使用%d类型。一切都应该只是%s,连接器将完成关于类型转换的工作