2011-09-11 64 views
1

我有一个看起来数据,如:SQL插入的关键键值数据

x1 y1 z1 x2 y2 z2 val1 val2 val3 val4 

有大约1000(X,Y,Z)三胞胎,但数据集涵盖了几乎所有-VS-所有组合,这给了我近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

你可以使用子查询,当然

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 = ?), 
?, ?, ?, ?) 
+0

谢谢,这正是我所需要的 – tnorgd

1

的如果你做到这一点只插入一次,这可能是微优化。

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

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

+0

是的,我正在使用> rowid <它是内置在任何sqlite表 – tnorgd

+0

我不是故意使用PRIMARY键,我的意思是做一个唯一的索引为所有列CREATE UNIQUE INDEX all_idx ON(x1,y1,z1,i1)。 – Yousf

+0

我刚刚有机会尝试这个,是的,这工作得很好! – tnorgd