用于键 - 键值数据的SQL插入

时间:2011-09-11 15:27:58

标签: sql sqlite insert

我的数据看起来像:

x1 y1 z1 x2 y2 z2 val1 val2 val3 val4

大约有1000个(x,y,z)三元组,但数据集几乎覆盖了所有组合,这给了我近50万行。我试图将它们插入sqlite。

我有一个包含x,y,z的点的表和一个包含index1,index2,值的结果的表。我目前的做法是

select index from table POINTS where x1,y1,z1-> i1
select index from table POINTS where x2,y2,z2-> i2
insert i1,i2,val1, val2, val3, val4 into table VALS

每行给出3个语句,速度非常慢。我可以在一份声明中这样做吗?我还想使用preparedStatement(),因为我通过JDBC连接到sqlite

2 个答案:

答案 0 :(得分:2)

你可以使用subselect,当然

INSERT INTO vals (i1, i2, v1, v2, v3, v4) VALUES
((SELECT index FROM points WHERE x = ? AND y = ? and z = ?),
 (SELECT index FROM points WHERE x = ? AND y = ? and z = ?),
 ?, ?, ?, ?)

答案 1 :(得分:1)

如果您只需插入一次,这可能是微优化。

如果定期完成,您可以为每个查询部分使用预准备语句。

请注意,加速select语句的最重要因素是使用的索引。在POINTS表的所有条目上添加UNIQUE INDEX将加快速度。