当前位置:编程学习 > C#/ASP.NET >>

千万级数据查询,如何实现数据的快速读取,并减少数据库的访问开销?100分

我用的是mssqlserver数据库  数据量10499997条数据(1千零四百多万数据)


我使用分页存储过程并建立了索引查询字段

每页:30条数据  
查询第n页面:100(查询第100页的数据)  
查询条件: titles like '我的测试数据%'  
查询结果:总共查询到1500007条数据(一百五十多万)
总查询时间:  1.016 秒(最快时:1.000秒)

现在的问题是 加入网站有1个会员登录 那没什么问题 加入有4000个会员同时在线,并且加入有其中2000人同时进行以上条件查询,我估计数据库就挂了,(我就知道小数据的访问可以放在内存中,进行多次访问,但向以上我这部分数据要是方内存上,估计服务器也挂了)

请问 有没有什么好的设计方案 ,能加快并减少数据库的访问开销呢,请教高高手指点!!!~~

--------------------编程问答-------------------- 上面的 "加入" 全部都是  "假如"  呵呵写错了  --------------------编程问答-------------------- 这个几乎没有法了。
用LIKE模糊查询中文这些本来就是效率很低的。
只有想办法用更加精确的查询比如用=,不用LIKE
另外你那个是提供给用户搜索的。也没有多少办法来建立CACHE。
--------------------编程问答-------------------- 接上,可以考虑用搜索引擎的方式建立文件索引。这个我不懂哈。以前同事搞过。
速度不错。但就是建立索引耗时 --------------------编程问答-------------------- 1,采用数据分流或者重新设计数据库
2,最好用单独的数据库服务器,每三年内做一次历史归档
3,对该表进行数据转移,办法是把表拆分成几个,可以这样起名table主表名称,拆分后的其他表名称table0,table1,table2......,查询时可以做个循环,如果表很多可以用多线程处理,增加时只对最后一个表操作。   
4,听说SQL2005下能解决这个问题,具体没做过. --------------------编程问答-------------------- 1,采用数据分流或者重新设计数据库 //这个结构已经够简单的了 我把内容字段都是单出来的内容表建立的
2,最好用单独的数据库服务器,每三年内做一次历史归档   
3,对该表进行数据转移,办法是把表拆分成几个,可以这样起名table主表名称,拆分后的其他表名称  table0,table1,table2......,查询时可以做个循环,如果表很多可以用多线程处理,增加时只对最后一个表操作。 
//——!比较汗
4,听说SQL2005下能解决这个问题,具体没做过. --------------------编程问答-------------------- 没有经验,顶一下 --------------------编程问答-------------------- 1.尽量增加搜索条件,缩小查询范围,使查询结果更加精确,范围也更小。
2.在上述的基础上,基于硬件的解决方案是添加web服务器集群和数据库服务器集群,分摊访问压力 --------------------编程问答-------------------- 用存储过程分页比程序分页要快 --------------------编程问答-------------------- 查询的时候最好用数据库的索引(含自动分词) --------------------编程问答-------------------- 这方面确实没有做过,学习中。 --------------------编程问答-------------------- 看你上边数据,查询速度还可以.

至于多并发量,承载能力的问题...往里砸钱..换好点的硬件吧.哈哈

或是听听高手有什么看法. --------------------编程问答-------------------- 我也想了解,谢谢LZ. --------------------编程问答-------------------- 最简单的办法,就是建立分区视图或者分区表,把数据分段。以你这个例子来讲,可以按照Title字段的首字母(汉字的话可以考虑拼音首字母)分区,你可以自己统计一下Title字段中各个字母出现的频率来决定划分多少个分区(不需要每个字母一个),SQL server会足够聪明的根据查询条件来决定只搜索特定的分区。

另外还可以从物理上进行IO优化,比方说建立多个文件组,把不同分区的数据交错存储在不同的数据文件和磁盘上,以其最大效率提高磁盘IO性能。

最后就是升级服务器硬件,或者建立服务器集群……这就贵了。 --------------------编程问答-------------------- 从长期来讲,你还可以优化一下,把访问频度最高的数据抽离出来,单独存储,查询的时候优先搜索高频度数据。这样对于常被访问的数据,搜索命中率和响应速度会提高,不过相对的,很少使用到的数据则会慢下来(要2次查询)。 --------------------编程问答-------------------- 我是来学习的,帮楼主顶一下~! --------------------编程问答-------------------- 帮顶,来学习
up --------------------编程问答-------------------- 分页存储过程,top的最快。帮顶帖子,学习 --------------------编程问答-------------------- 根据用户级别设置允许查询内容,比如,低级用户只能查询3个月内
--------------------编程问答-------------------- 技术贴要收藏 --------------------编程问答-------------------- 此帖推荐!版主 --------------------编程问答-------------------- mark ...学习下 --------------------编程问答-------------------- 这个要学习 --------------------编程问答-------------------- 期待高手加入,比如SP1234,出来说个我们做为技术人员的提升办法,
动不动就加服务器,砸钱,那还要你们做技术的干P啊,靠 --------------------编程问答--------------------
引用 15 楼 zeng_job 的回复:
我是来学习的,帮楼主顶一下~!

前年的帖也给挖出来。高手 --------------------编程问答-------------------- 什么时候的帖子不重要,重要的是这样的问题很多程序员都会遇到,会头痛。

期待一个比较专业,比较权威,比较NX的高手做答。
并推荐 --------------------编程问答--------------------
引用 23 楼 fcpslove 的回复:
期待高手加入,比如SP1234,出来说个我们做为技术人员的提升办法,
动不动就加服务器,砸钱,那还要你们做技术的干P啊,靠

 什么话,? lz的查询效率已经挺高了. 比如  like '条件%' 已经考虑到sarg查询方式,  索引是有效使用的.  ,在索引优化上, sql查询的聚集索引用在你常用的查询条件上.  聚集索引是可以指定几个字段的, 通常提升聚集索引的效率是将常用查询字段指定在聚集索引的最前面,
 查询的效率很大程度在硬件的i/o上影响了, 如果sql查询已经做到很好的优化了, 建立文件索引 是一个方向, 提升硬件是一个又简单, 又快速的效果. --------------------编程问答--------------------
引用 23 楼 fcpslove 的回复:
期待高手加入,比如SP1234,出来说个我们做为技术人员的提升办法,
动不动就加服务器,砸钱,那还要你们做技术的干P啊,靠

如果各方面做到很好了,
那说明瓶颈就是硬件,
该砸钱的问题不砸钱,
你就是请微软专家来也解决不了。。。。。。。。。。。。。。。
--------------------编程问答-------------------- 楼主 这个可能对你有帮助
  http://blog.csdn.net/CalvinDo/archive/2010/02/02/5279760.aspx --------------------编程问答--------------------
引用 27 楼 foren_whb 的回复:
引用 23 楼 fcpslove 的回复:
期待高手加入,比如SP1234,出来说个我们做为技术人员的提升办法,
动不动就加服务器,砸钱,那还要你们做技术的干P啊,靠

如果各方面做到很好了,
那说明瓶颈就是硬件,
该砸钱的问题不砸钱,
你就是请微软专家来也解决不了。。。。。。。。。。。。。。。



你是说“如果各方面做到很好了”,“如果”我相信所有跟帖就是3个字“加IO”
前几楼的回复,有好几点都是不错的。。 --------------------编程问答-------------------- 学习了
--------------------编程问答-------------------- 用Lucene 索引 提高查询效率 个人愚见 --------------------编程问答-------------------- 参考
百万级数据查询分页
http://topic.csdn.net/u/20090113/16/cac6480c-84ff-4ae3-8fa1-11cfa39fd8ea.html --------------------编程问答--------------------

2008的帖子。。。。谁这么无聊
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,