index页面读取多个数据表会降低执行效率问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 08:54:09
如题,index页面要读取多个数据表的记录,效率明显降低,请问有什么办法可以解决?
如:
一论坛首页要读取的数据表有:版块/留言/会员/公告/会员积分等等很多数据表.如果一个一个读取,效率就会非常低.....
我目前的解决办法有两个:
1:动态页写静态页,生成静态页面,对访问速度是一个很大提升.但是如果要做的是一个论坛之类的访问频率极高的页面的话,那肯定是不实际的,对静态页面的重写频率一高,整个页面的访问速度反而下降了.
2:把主页面的所有内容通过一些冗余全部集中到一个专用的数据表.这个方法虽然能让主页面只读取一次数据库,速度是很快,但是数据冗余,写操作时的效率下降就成了比较麻烦的问题....

我想知道的就是各位都用什么方法来处理这样的问题,我相信写网站的应该都碰到过这样的问题吧....

另外,想问下,有很多网站,能先对页面进行加载,然后再加载页面中的需要读到另外的数据表的内容的部分.比如一个百度博客的文章列表页面,能先加载页面的主要内容,再加载一篇文章被游览/评论了多少次等内容,这是怎么做到的?当然应该不是AJAX的,请高手指教.谢谢!
Flycat1022:数据冗余是暂时解决这个的唯一办法了...SQL联合查询是不是就是指存储过程?SQL语句优化的话我相信我做得还行,至于把记录转换成JS到客户端实现,我觉得这和在服务器端没太大的区别
海老鼠:数据库优化我觉得也是比较现实的办法.缓冲池是一定的,据我所知如果SQL语句相同,则自动应用缓冲池,而且默认是缓池冲打开的..:)SQUID加速这个我不知道,一会去百度查...静态的话,我也试过了ebaige:XML来写?抽象了.XML用来存储吗?不安全,而且如果数据量大,我觉得速度比读数据库要慢很多啊.我觉得XML不太适合用来存储,用来流通倒是很好,通用.
skalish:换个论坛?我是要自己写...呵呵.最后那个应该不会是AJAX,个人觉得.我一会再去查,谢谢!
besuree:JSP和ASP或者ASP.NET我觉得都差不多.我没听说过JSP比ASP快多少的.我用的也是SQL数据库,除了JS和CSS外,我一般不用包含.为什么我个人觉得JS去做一些效果或者用户体验是很好的,用JS来读东西,我始

首页上变化的信息并不多。。。最多也就是几十k的样子,把他们存在内存里(例如asp的application中),这样读的时候,首页就完全从内存中获得数据,写的时候,则需要同时写到内存和数据库,整体效率应该可以达到最高。

补充一点,写进内存的数据可不是整个首页的内容,而是类似版面、最新帖列表、在线用户等信息,页面输出还是要重新组织的,只是数据获取无需连接数据库而已。

当然,如果你愿意,也把生成的页面放在内存里,只是我不觉得这办法会带来什么好处。

祝你好运^_^

-
解决方法:

1, 根据实际情况, 使用最优算法规划数据库结构, 必要时可以允许一些数据冗余
2, 尽量使用sql的联合查询等, 减少连接服务器的次数
3, 对于可能需要用到循环的, 考虑是否能够获取所有记录然后转换成js到客户端实现循环 :) 不行的话就使用服务器端代码实现~~~~
4, 优化sql句子和代码结构
5, 优化数据结构是必要的, 对于较为繁琐和频繁的查询, 可以考虑使用视图和存储过程~~~~提高查询效率
6, 缓存可以提高一定的效率, 但是不推荐在缓存中放太多的数据~~~

总结一下几位的答案, 大概就是这些:

1, 使用大型数据库系统, 合理使用存储过程和视图
2, 优化查询语句, 提高查询效率
3, 适当使用缓存, 优化代码, 提高程序执行效率
4, 尽量把不经常改变的数据保存成文本, 减少读取数据库的次数
5, 结合使用AJAX~~~~

另外, 说说JS, 有些数据不太如果使用服务器代码来处理, 由于效率上的问题, 容易增加用户的等待时间, 换成JS或者AJAX, 可以让用户在等待的过程中先去了解其他模块的内容..同时也减少了服务器的负担~~~~~而且, 只要客户机不会太栏..执行JS都比较快的, 而且使用JS传递的数据往往要比直接传递编译后的所有HTML来的小~~~~

不是很专业,但是思路可以提供一些

1、数据库肯定不要用access,数据实在太大,想想更换一种本身效率高一点的数据库