在Oracle DB中选择数百万行的最佳方法

chr*_*ris 3 java sql oracle select

天儿真好!

我有一百万个不同的单词,我想在一个有1500万行的表中查询.同义词和单词的结果将在每次查询后得到处理.

表看起来像这样:

    synonym      word
    ---------------------
    ancient      old
    anile        old
    centenarian  old
    darkened     old
    distant      far
    remote       far
    calm         gentle
    quite        gentle
Run Code Online (Sandbox Code Playgroud)

这就是目前在Java中完成的方式:

....
PreparedStatement stmt;
ResultSet wordList;
ResultSet syns;
...

stmt = conn.prepareStatement("select distinct word from table");
wordList = stmt.executeQuery();

while (wordList.next()) {
    stmt = conn.prepareStatement("select synonym from table where word=?");
    stmt.setString(1, wordList.getString(1));
    syns = stmt.executeQuery();

    process(syns, wordList.getString(1));
}
...
Run Code Online (Sandbox Code Playgroud)

这令人难以置信的缓慢.做这样的事情的最快方法是什么?

干杯,克里斯

Jee*_*Bee 5

  1. 确保'word'列上有索引.

  2. 将第二个prepareStatement移到word循环之外.每次创建新语句时,数据库都会编译并优化查询 - 但在这种情况下查询是相同的,因此这是不必要的.

  3. 结合上面的sblundy所做的陈述.