2005年8月9日星期二

数据库检索和程序的效率

在做一个小小的实用的系统的时候我发现了一些效率的问题。
比如一个操作,web页面上用户发出一个查询,希望的时间当然是最多1到两秒。
一开始设计、编程的时候并不太清楚执行的效率问题。尤其是实用的时候
的数据量突然会比较大。编写的时候一般没有“兴趣”去做那么多,那么复杂的测试数据。
所以在试用的时候,发现某几个页面的效率比较低。几乎要半分钟到5分钟。要看数据量了。
不能用“我是菜鸟”来解释这个现象,因为我不是菜鸟。最后问题都被我解决了。
不管什么页面,什么操作,响应时间都大约在1秒一下。当然如果服务器如果不是双CPU的
而是几年前的386。那么怎么办?估计再优化优化也是有可能的。也许只能用别的方法
来绕过去。这是效率的相对性。但是优化中我发现了一些提高效率的方法。
1。就是“少发行sql”。如果发行n次查询,就优化成发行1次查询。最佳状况是一个页面
关于一个表的查询只有一次。这样说可能有时不太对。但是如果性能的确有问题,那么
就用这个方法吧。
2。Java端不是瓶颈。我很久没有编出运行时间很长的程序了。主要是查询页面的
逻辑一般都比较简单。除非我写的搜索最优值用搜索算法而不是动态规划之类的算法
时才遇到了天文数字的运行时间。我在这个项目中作了Java端的Group by。是的,代替sql的
group by.当然这是出于某种原因。不知道各种奇思妙想为我节约了多少开发时间。
group by用的时间是0,而open了个jdbc connection典型时间为20ms-80ms。
综上所述,使用数据库,为了效率,应该要改变一种思路。
他不是有一个查询就写一个sql.当然这样比较直接。
他是数据的来源。一开始你就用尽量少的sql取得所以你需要的数据。然后你再做你的
查询业务。
说了那么多,要是有个实际的例子就好了。那样就接近于一篇论文了。但是我没有
时间,懒的写了。所以就到此为止了,希望读者能体会一下。
-----

没有评论:

博客归档

neoedmund's shared items

我的简介

ZIP Code File