2015-04-12 61 views
0

我使用sqlite来存储数据。我试图从sqlite表视图中获取数据并填充java中的对象数组,但Query Execution需要很长时间。 我只有32个对象有22个字段,而sqlite有380个行。 但要执行类似的声明花了17秒32个对象。Sqlite ExecuteQuery与Java很慢(netbeans)

sql = "SELECT " 
         + "   field1," 
         + "   field2," 
         .... 
         + "   field22" 
         + " from Rankedview WHERE Ranking = " + Integer.toString(RankingIndex); 
try (ResultSet rs = stmt.executeQuery(sql)) { 
        while (rs.next()) { 
         a[j].field1= rs.getString("field1"); 
         .......... 
         a[j].field22 = rs.getInt("field22"); 
        } 

       } 

我更新源码-JDBC驱动从3.7.2从降低到9秒17秒3.8.5时间之后。 image

如何提高性能?

编辑:

视图定义(ATP是一个表)

CREATE VIEW Ranked AS 
SELECT p1.ID, 
     p1.field2, 
     ... 

     p1.field21, 
     (
      SELECT count() + (
           SELECT count() + 1 
            FROM Table AS p2 
           WHERE p2.field21 = p1.field21 AND 
             p2.id > p1.id 
          ) 
      FROM ATP AS p2 
      WHERE p2.field21 > p1.field21 
     ) 
     AS Ranking 
    FROM ATP AS p1 
ORDER BY Ranking ASC; 

EXPLAIN查询计划输出:

selectid order from detail 
0 0 0 SCAN TABLE ATP AS p1 
0 0 0 EXECUTE CORRELATED SCALAR SUBQUERY 1 
1 0 0 SCAN TABLE ATP AS p2 
1 0 0 EXECUTE CORRELATED SCALAR SUBQUERY 2 
2 0 0 SEARCH TABLE ATP AS p2 USING INTEGER PRIMARY KEY (rowid>?) 
0 0 0 EXECUTE CORRELATED SCALAR SUBQUERY 3 
3 0 0 SCAN TABLE ATP AS p2 
3 0 0 EXECUTE CORRELATED SCALAR SUBQUERY 4 
4 0 0 SEARCH TABLE ATP AS p2 USING INTEGER PRIMARY KEY (rowid>?) 
0 0 0 EXECUTE CORRELATED SCALAR SUBQUERY 5 
5 0 0 SCAN TABLE ATP AS p2 
5 0 0 EXECUTE CORRELATED SCALAR SUBQUERY 6 
6 0 0 SEARCH TABLE ATP AS p2 USING INTEGER PRIMARY KEY (rowid>?) 
0 0 0 USE TEMP B-TREE FOR ORDER BY 
+0

哪个Java语句占用最多时间? –

+0

ResultSet rs = stmt.executeQuery(sql) – user345280

+0

显示视图定义,任何索引以及[EXPLAIN QUERY PLAN](http://www.sqlite.org/eqp.html)的输出。 –

回答

0

要获得与特定的等级一排,你不应该在计算但用LIMIT/OFFSET clauses

SELECT ... 
FROM ATP 
ORDER BY field21, id 
LIMIT 1 OFFSET x 

这仍然需要对所有表行进行排序以确定哪个是第x个,但是比多个嵌套表扫描有效得多。

+0

它工作得很好。 executeQuery现在在0.15s以下 – user345280