更快地制作150,000个SQL查询?

时间:2014-06-03 21:50:55

标签: sql sql-server jdbc

我有一张约110万行和12列的表格。这些列是元素的名称(设置为聚集的非唯一索引),日期和包含统计信息的10个整数。这些数据大约有一周的统计数据,超过150,000个元素。

数据库位于ms-sql-server 2008上,位于我的PC外部。

我要生成一份报告,显示过去一周所有150,000多个元素的所有统计数据。我一次查询DB一个元素,因此总共大约150,000个查询,每个ResultSet返回7行。完成5个查询大约需要一秒钟。这对于每日报告来说太慢了。

那么,这只是生活还是我能做些什么来加快速度呢?在处理这个问题时,我已经删除了ResultSet的所有处理,以确保大部分时间实际上花在执行查询上。

JDBC

Statement stmt = m_connection.createStatement(); 
ResultSet rs   = stmt.executeQuery("SELECT * FROM " + DB_TABLE_PVG_STATISTICS + " WHERE " + Data.PVG_SPAN_NAME +  "='" + pvgSpanName + "' ORDER BY " + Data.DATE + " DESC");

尝试更好地解释表格中的数据。下面是数据的简略模拟。

Detroit laps/400 sts/0 vt1dot5/1,1 | 06-02-14 | 13400916 | 13408882 | 45 | 32 | 6  ...
Detroit laps/400 sts/0 vt1dot5/1,1 | 06-01-14 | 12000825 | 19998206 | 43 | 21 | 5  ...
Detroit laps/400 sts/0 vt1dot5/1,2 | 06-02-14 | 13001056 | 13001007 | 67 | 2  | 78 ...
Detroit laps/400 sts/0 vt1dot5/1,2 | 06-01-14 | 11001078 | 11000002 | 42 | 2  | 45 ...
Omaha laps/400 sts/0 vt1dot5/1,1   | 06-02-14 | 13001056 | 13001007 | 67 | 2  | 78 ...
Omaha laps/400 sts/0 vt1dot5/1,2   | 06-01-14 | 11001078 | 11000002 | 42 | 2  | 45 ...
etc...

“Detroit laps / 400 sts / 0 vt1dot5 / 1,1”是pvgSpanName的一个示例。 “底特律圈/ 400 sts / 0 vt1dot5 / 1,2”是另一个。表中有150,000多个独特的pvgSpanNames。

每个pvgSpanName将有7天的数据。上面,每个pvgSpanName示例中只显示两天。与pvgSpanName列和日期列一起还有10列统计信息。示例中只显示了5个。

150,000+ pvgSpanNames * 7天= 1,000,000+行。

每个查询的ResultSet(每个pvgSpanName一个)是7行(每个日期1行)。 ResultSet由java程序解析,最终存储到.txt文件以上传到网页。输出类似于以下

Detroit laps/400 sts/0 vt1dot5/1,1

               Running  ErrorFree  Errored  Frame   CRC      More
     Date         Time    Seconds  Seconds  Errors  Errors   Stats
-----------------------------------------------------------------------
06-02-14 Mon  13400916  13408882     45       32      6      ...
06-01-14 Sun  12000825  19998206     43       21      5      ...
05-31-14 Sat  13400916  13408882     43       21      5      ...
05-30-14 Fri  13400916  13408882     42       21      4      ...
05-29-14 Thu  13400916  13408882     42       21      4      ...
05-28-14 Wed  13400916  13408882     41       21      3      ...
05-27-14 Tue  13400916  13408882     41       21      3      ...
-----------------------------------------------------------------------



Detroit laps/400 sts/0 vt1dot5/1,2

               Running  ErrorFree  Errored  Frame   CRC      More
     Date         Time    Seconds  Seconds  Errors  Errors   Stats
-----------------------------------------------------------------------
06-02-14 Mon  13001056  13001007     67        2      78     ...
06-01-14 Sun  11001078  11000002     42        2      45     ...
05-31-14 Sat  13400916  13408882     42        2       5     ...
05-30-14 Fri  13400916  13408882     42        2       4     ...
05-29-14 Thu  13400916  13408882     42        2       4     ...
05-28-14 Wed  13400916  13408882     42        2       3     ...
05-27-14 Tue  13400916  13408882     42        2       3     ...
-----------------------------------------------------------------------

and so on for each pvgSpanName.

仅供参考:我目前无法访问实际数据,因此请不要过多关注统计数据的实际值。

0 个答案:

没有答案