最近半个月的时间学习了Oracle数据库的使用,刚刚接触这一块,需要访问的数据量大概有90万,程序完成第一版的时候,程序执行一次的时间大概要四个小时,显而易见:时间太久,无法满足使用要求。于是我们组长提出时间优化。
时间优化想到的有两个方面:1、Oracle数据库使用方面。2、程序计算方面通过添加约束条件。最终在这两个方面都取得了优化,现在程序运行一次只需要2分钟。可以说是改善非常大!下面分享一下
- 第一部分
数据库在使用之前首先要做的是数据库的连接,不同的数据库的连接稍有不同。
SQL语句的使用在开始这个项目之前,组长就让我接触学习过,但是当时理解的不够彻底,通过这次有了一个比较好的理解:首先如果我们使用SQL plus进行操作的话,就比较简单,登录到数据库之后,直接输入SQL语句即可。如下:
SELECT PEOPLE 进入时间 FROM GSM.普通用户记录表 WHERE 进入时间<180801000000000 AND 进入时间>180701000000000;
如果我们在VS中写的话,就有些不同了:
string data = "SELECT DISDINCT PEOPLE FROM GSM.普通用户记录表 WHERE 进入时间>" + starttime +"AND 进入时间 <" + endtime;
程序运行之后,data给到数据库的语句其实就是上面我们输入到SQL plus中。
- 第二部分
第一周完成了程序的编写,但是时间远远超出预期,于是第二周开始了时间优化的漫漫长路。时间优化推荐几篇博客:Oracle数据库时间优化 和Oracle数据库时间优化2 。虽然在Oracle数据库优化的Blog中都不推荐使用子查询,但是我这里情况比较特殊,因为需要查询两次,于是通过思考,想出一种子查询的语句,将两次查询改成了一次 查询,由于数据量的原因,还是很大程度上改善了时间消耗。
DISTINCT COUNT(*) ORDER BY 尽量少使用。
同时,发现在对UI进行操作的时候会耗费大量的时间资源,因此我尽量减少输出,只显示最后的结果。
dataGridView、Console 应该尽量少使用。
以上,仅仅记录学习过程!