我们现在要开发一个Web项目 ASP.net + Sqlserver 
现在客户端大约在350台左右,用户已经有约10GB的数据量,每天生成新数据大约在30M左右,数据量很大。Web平台的检索一直是我们的一个技术瓶颈,各何况是这么庞大的数据,要求检索100万条数据不能超过5秒,所以请大家踊跃发言。谢谢,分不够在加。

解决方案 »

  1.   

    to jiezhi(风满袖)
    4、数据缓存 
    谢谢您的参与,数据缓存多少才更合适呢?如果每人检索1M的数据那么服务器的内存将要被占去了350M左右的空间,这个要求会不会太高呢?
      

  2.   

    建议把部分数据缓存起来,放到 Cache 中,如果服务器条件允许的话,你缓存一半的数据,另一半的数据用其他的方法处理用户在请求数据时,首先检索 Cache 中的数据,其实再检索数据库中的数据
      

  3.   

    --数据库全文索引,查询在100W以上的记录<1S.
      

  4.   

    --全文索引配置参考:
    http://blog.csdn.net/zlp321002/archive/2006/03/01/613098.aspx
    --全文索引有很强大的检索数据功能.他能检索相似词.关键字的附近词.等等..
      

  5.   

    to mistysunlight(飘渺日光) 
    是的,我也正在看,能否指点一二?
      

  6.   

    用分页的存储过程
    提高服务器性能,将web服务和sql服务分布在不同的服务器中
    配置sql索引
      

  7.   

    Sql 2005的分页速度很快的,我30多万条数据,查询每一页只要0.01秒左右。
    关于聚簇索引和非聚簇索引的分配一定要做好,可以惊人的提高效率。建议你察看一篇文章,名字叫“海量数据库的查询优化及分页算法方案”
    去google或百度搜索看下,相信会对你有很大帮助。
      

  8.   

    谢谢各位积极参与!
    To CCjian(默契) 能否详细一些?谢谢!
      

  9.   

    http://blog.csdn.net/zlp321002/archive/2006/03/01/613098.aspx
      

  10.   

    to kevinmartin(海魂)
    如何实现,能否可以共享以下?
    我现在编写的分页存储过程检索 
    10000条以内的纪录可以控制在2秒以内,但是在查询20000条左右时就已经超过4秒了。
      

  11.   

    CREATE   PROCEDURE DataPaging
    (
    @ItemsPerPage int, --页面大小
    @CurrentPage int,  --页码
    @TableName nvarchar(100), --查询表名
    @SortField nvarchar(50) -- 排序字段
    )
    AS
    DECLARE @Command nvarchar(4000)
    BEGIN
    SET @Command = 'SELECT * FROM '+
    ' (SELECT TOP ' + CAST(@ItemsPerPage AS nvarchar(100))+' * FROM '+
    ' (SELECT TOP '+CAST( @ItemsPerPage*@CurrentPage AS nvarchar(100)) +' * FROM '+
    ' (SELECT * FROM '+ @TableName+') AS t0 '+
    ' ORDER BY '+ @SortField + ' ASC) AS t1'+
    ' ORDER BY ' + @SortField + ' DESC) AS t2 '+
    ' ORDER BY  ' + @SortField
    EXEC (@Command)
    END
    GO
    这是我的存储过程,各位大虾看看,能否给优化以下。谢谢!
      

  12.   

    evafly920 (伊凡网络) 兄 的存储过程简化版
    CREATE  PROCEDURE SP_Pagination 
    @TableName nvarchar(100), --表名
    @PrimaryKey nvarchar(100),--主建
    @PageSize int,            --页面大小
    @CurrentPage int,         --页码
    @SortField nvarchar(100)  --排序字段
    AS
    BEGIN
    DECLARE @StartRow nvarchar(50)
    DECLARE @SqlText nvarchar(1000)

    IF @CurrentPage < 1
    BEGIN
    SET @CurrentPage = 1
    END
    SET @StartRow = CAST((@CurrentPage - 1) * @PageSize + 1 AS nvarchar(50))

    SET @SqlText = 
    '
    DECLARE @CurrentRow nvarchar(20)
    SET ROWCOUNT  '+CAST(@StartRow AS nvarchar(20))+'
    SELECT @CurrentRow = '+@PrimaryKey+'  FROM ' + @TableName+ '  ORDER BY  ' + @SortField +'
    SET ROWCOUNT  '+CAST(@PageSize AS nvarchar(20))+'
    SELECT * FROM '+@TableName+'  WHERE '+@PrimaryKey+'  >= @CurrentRow ORDER BY '+@SortField+'
    '
    EXEC SP_EXECUTESQL @SqlText
    END
    GO
      

  13.   

    同意CCjian(默契)的觀點 使用分步事物处理,组件服务,将数据放到缓存中,然后每隔一定时间与数据库交互,这样可以提高访问效率。可试试。
      

  14.   

    to CCjian(默契),jacksom() :能否 详细解释一下分步事物处理,组件服务,将数据放到缓存技术,本人对.net是新手,谢谢!
      

  15.   

    分几台服务器处理吧,前台一台Web Server,仅负责WebUI的服务,然后查询它调用Query Server;Query Server负责查询的业务逻辑,但数据它向Index Server取;Index Server仅负责索引,总的数据存放在Data Server。
      

  16.   

    先做全文检索,然后用contains()代替LIKE,当然不要忽视数据库的设计,好的结构也会提高性能。
      

  17.   


    建议认真的看完下面的文章:翻动100万级的数据 —— 只需几十毫秒 之揭秘篇:有详细的说明,不要错过。 http://blog.52forum.com/jyk/archive/2005/12/06/305.html
    >>>请大家继续,我在一个109万的记录集中查找一条数据现在需要大约30秒请用下面的格式试一下,会在一秒内返回结果的!select top 1 * from yourTable where 你的查询条件 注意:加上 top 1 这一点很重要。另外排序字段要有索引 !你的SQL Server 2000 打上了 sp4的补丁了吗?这一点也很重要!
      

  18.   

    to jyk(喜欢编程。和气生财。共同提高。共同进步) 谢谢你的提示,但是你的那种方式只支持单表而且是单主健的数据结构,如果是联合表,复合主健该如何处理呢,请指点一二。谢谢。