我试图将一些数据插入我的数据库。
但不幸的是,我有一个双重约会的小问题。
由于我的文件表示代表了一些足球比赛和比赛。
e.g。 Barcelona.txt
Spa;PRD;Espanyol;A;1;1;0;R;1396105200;14-03-29;Sat
Spa;UCL;Atletico Madrid;H;x;1;1;R;1396377900;14-04-01;Tue <--
Spa;PRD;Real Betis;H;1;3;1;R;1396713600;14-04-05;Sat
我会有一些含义相同的行
例如 Atletico Madrid.txt将有一个值
Spa;UCL;Barcelona;A;x;1;1;R;1396377900;14-04-01;Tue
是一样的。因此,我将这两个值放入我的数据库
"1","Spa","UCL","Barcelona","Athletico_Madrid","H","x","1","1","R","1396377900","14-04-01","Tue "
"6","Spa","UCL","Athletico_Madrid","Barcelona","A","x","1","1","R","1396377900","14-04-01","Tue "
换句话说,如果我改变一些值,A队是B队,反之亦然。 H = = A,1&lt; =&gt; 0,outscore&lt; =&gt;本垒打然后我在同一行。
实际上,通过检查数据库中是否存在已转换的行,很容易避免这些双重值。
rs = stmt.executeQuery( "SELECT * FROM WEDSTRIJD w WHERE " +
"w.DATE = '"+ date +"' and " +
"w.TEAM = '"+ opponent +"' and " +
"w.OPPONENT = '"+ team +"' and " +
"w.SCORED = "+ param[6] +" and " +
"w.AGAINST = "+ param[5] +" ;" );
但通过执行此检查, if(rs.getRow()== 0) - &gt; 插入行 。一切都变得非常 缓慢。通常,插入+100.000行需要3秒钟,但现在通过此检查,需要+ 1小时25分钟。
那么有谁知道更好的解决方案吗?哪个不是很可怕?
答案 0 :(得分:1)
当数据库需要根据其值搜索行时,必须遍历表中的所有行以进行比较。
当搜索到的列中存在index(至少一些)时,可以加快此类搜索。 索引返回的结果越少越有用(因为数据库可以避免读取更多行),查询执行的次数也越多。
对于此特定查询,您应该在最具选择性的查找列上创建索引:
stmt.execute("CREATE INDEX whatever ON WEDSTRIJD(DATE, TEAM)");