无论在SQLserver的企业管理器里还是从VB程序里查询都会出现超时。情况如下:
1)只查一张表。
2)查询语句为:select * from hstore where chno='001' and pno='0001'
3)在chno和pno上都有索引如果只查select * from hstore where chno='001' 就不会超时,虽然速度也很慢

解决方案 »

  1.   

    无论在SQLserver的企业管理器里还是从VB程序里查询都会出现超时。 
    --------
    在程序VB调用时,有设置超时的函数
      

  2.   

    1、SQL 里面设置查询超时时间
    2、VB客户端设置查询超时时间
      

  3.   


    另外表的数据量有多大,
    有特殊字段吗,如photo
    一个表查询能有多慢
      

  4.   


    1)大约1000x5000x200条记录。全是numeric(18,2)或char(10)字段。
    2)超时均设置为0(不限时)
    3)如果能查出来,大约10分钟以上吧。
      

  5.   

    试试下面这句的查询速度:
    select Count(*) from hstore where chno='001' and pno='0001
    如果很快返回,那么引发超时问题的原因不是什么索引没建好之类的,完全是因为你返回的数据集太大,构建/传递这个返回结果太耗时。
    大数据量查询要用分页,这个网上有很多例子。
      

  6.   


    1)数据量大约为1000*5000*300条记录
    2)所有字段都是numeric(18,2)或char(10)
    3)如能查出结果,查询时间一般要10分钟以上
    4)各处的查询时间均设置为0(不限时)
      

  7.   


    问题是我条件越多返回的数据集越小越超时。如原题所述,条件多时只返回一个记录就超时,而条件少时返回几十条记录则慢但是不超时。
    您说的这个count(*)的方法我试一下。
      

  8.   

    都char(10) 的话而条件是chno='001' 有没有可能有很多空格的影响.如果只查select * from hstore where chno='001' 就不会超时,虽然速度也很慢->
    试一下.去掉右左空格.
    select * from hstore where rtrim(ltrim(chno))='001' 
      

  9.   


    试过了,count也超时。
    其实返回的数据集并不大。如前所述,条件少数据集大一些(几十条)反而不超时,条件多数据集小(1条)才超时。
    索引也重新做过了(花了好几个小时),没有任何效果。
      

  10.   

    楼主给我下面这两个值先:
    select count(*) from hstore where chno='001'
    select connt(*) from hstore where no='0001' 
      

  11.   

    再给我select count(*) from hstore 的值。要在查询分析器里执行。
      

  12.   


    星期天吧,星期天我才能接触数据库。
    其实我写的只是示意性的。hstore里大约有800000x1000条数据。如果只有一个chno(代表商场)条件就是这个数除500。加一个stdate条件(代表日期)再除1000。加一个pno条件(代表货号)再除1000等等。
    您是什么意思呢?
    其实我觉得问题很简单,就是表太大。但是sqlserver是大型数据库啊,以前稍微小一点的表连foxpro这样的桌面数据库速度都很快,语言思路都类似,所以不明白。
      

  13.   

    而且foxpro还是dos版的,机器还是586就是奔1的,内存16M。
    代码好多是copy移植的。只是现在是双核的,window xp,内存2G。
    所以肯定有什么问题。
      

  14.   

    数据量大的情况下,有以下几种情况会造成这种现象:
    1.索引有碎片
    2.select * 中字段有ntext字段
    3.where chno='001' and pno='0001'  条件改为where pno='0001' and chno='001' 有可能会有作用(未测试) 
      

  15.   

    (1)帖出hstore的表结构 (包括主键、索引等说明)
    (2)帖出select count(*) from hstore where chno='001' and pno='0001' 的执行计划。我们猜是没办法解决问题的。
      

  16.   

    1)帖出hstore的表结构 (包括主键、索引等说明) 
    (2)帖出select count(*) from hstore where chno='001' and pno='0001' 的执行计划。 我们用猜的方法是没办法解决问题的。 
      

  17.   

    select * from hstore with(nolock) where chno='001' 会不会正在使用表,加上with(nolock)试试。
      

  18.   


    表结构:.CommandText = "create table hstore0(stdate datetime,chno char(5),pno char(10),pcolor char(10),psize char(10),amount numeric,money numeric(9,2),cho char(5))"
    没有主键。stdate,chno,pno设过索引也删过重新设过,有没有索引都超时。
    数据规模:每天800000条。2-3年就算1000天再乘以1k吧。执行计划不懂。就是在企业管理器里按SQL按钮直接写直接执行。执行起来会有区别吗?
      

  19.   

    没有主键----------
    先设了主见先,然后在chno='001' and pno='0001' 上加索引...
      

  20.   

    --用以下方法测试下
    0、对表执行dbcc checktable,检查有无错误
    1、把chno与pno数据类型由char修改为varchar
    2、如果这两个字段的值如果包含NULL, 全部设置为''
    3、把表中的索引全删除后只建立这两个字段的索引
    4、查询字段列表中只包含chno与pno查询分析器中执行语句前,选中执行计划(ctrl+K)
      

  21.   


    试过了,count一样是超时。 
      

  22.   

    删除索引后,重新建立索引!2000DBCC DBREINDEX2005
    ALTER INDEX ALL ON  表 REBUILD