我的数据看起来像:
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
答案 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将加快速度。