我有一张约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.
仅供参考:我目前无法访问实际数据,因此请不要过多关注统计数据的实际值。