SQLite,第1列和第2列的不同行,值A和B与B和A相同

时间:2014-10-01 18:22:56

标签: sqlite

我试图将一些数据插入我的数据库。

但不幸的是,我有一个双重约会的小问题。

由于我的文件表示代表了一些足球比赛和比赛。

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分钟。

那么有谁知道更好的解决方案吗?哪个不是很可怕?

1 个答案:

答案 0 :(得分:1)

当数据库需要根据其值搜索行时,必须遍历表中的所有行以进行比较。

当搜索到的列中存在index(至少一些)时,可以加快此类搜索。 索引返回的结果越少越有用(因为数据库可以避免读取更多行),查询执行的次数也越多。

对于此特定查询,您应该在最具选择性的查找列上创建索引:

stmt.execute("CREATE INDEX whatever ON WEDSTRIJD(DATE, TEAM)");