之前做过一个基于 .net 2.0+SQL 2008 做的地区性的网站,是用两层结构做的。在网站的首页有一个记录访问者IP的功能,数据表累计到现在,一共有25000多条不重复的IP,共有IP 30000多条。现在上头说要加上一个功能,要把这些IP所属的地区都查出来。之前有人手动查到4000多条,然后就不做了。所以现在上头说,在page_load里,加上如下功能。基于以前的查出来的IP所属地区,把没有查出所属地的IP先和以前的查出来的做对比,如果IP一样,就把后来的IP加上所属地就好了。如果IP是以前没有的,则显示在网页上,让员工手动查完后,再手动输入,一次更新一条,更新完要马上就可以看到刚更新过的数据。请问,如按这样的业务流程,有没有高效的方法?或是更好的写法?我怕这么多的数据,用gridview+dataset来做,会导致内存暴涨,网站crash掉。这个网站没有存储过程,我现在只会用dataset来读完数据,再用gridview分页,这么多的数据,一条IP更新完马上就要重新bind,用 updatepane做显示。
那这样你就只有单纯从代码上做优化。既然是分页的话 那你可以排序下取出最近被更行的记录放前头,一页取多少条自己定,这样就不用一次将所有记录都取出来。SQL语句照样能实现啊 不一定要存储过程分页如果可以动数据库的话最好 可以加索引什么的 可以提高访问效率。几百万的数据都能访问 何况你这只有几W
分页程序网上一大堆
另外建议你的做成分页查询,
select top 行数*页数 from table where id not in(select id top 行数*(页数-1) id from table order by id) order by id
把读取的ID先保存在IIS上面做为全局变量。每天对IP的操作全部放在内存中,不要去访问数据库了。然后在做个页面,人少的时候,将这些数据一次性提交到服务器上面。更新完毕后在读取,
2、在后台开发一个新功能,对地区为空的字段,进行该IP的地区查询,把查询到的地区写入该地区字段
3、可以使用纯真数据库,进行IP对地区的查询,3万条数据可以批次更新,比如一次更新5000条数据,6次就完成了
4、要一次性显示3万条数据,估计网页会卡死,如果没有什么必要,是不要这样操作的,可以分页。如果显示很多的数据是为了查找一些需要的数据,那么可以增加一个搜索项,比如可以搜索某个地区的所有IP等等。显示出来的数据,就直接读取IP、地区字段了,不必要再进行什么实时查询,实时查询是自杀的方式。