无论在SQLserver的企业管理器里还是从VB程序里查询都会出现超时。情况如下:
1)只查一张表。
2)查询语句为:select * from hstore where chno='001' and pno='0001'
3)在chno和pno上都有索引如果只查select * from hstore where chno='001' 就不会超时,虽然速度也很慢
1)只查一张表。
2)查询语句为:select * from hstore where chno='001' and pno='0001'
3)在chno和pno上都有索引如果只查select * from hstore where chno='001' 就不会超时,虽然速度也很慢
--------
在程序VB调用时,有设置超时的函数
2、VB客户端设置查询超时时间
另外表的数据量有多大,
有特殊字段吗,如photo
一个表查询能有多慢
1)大约1000x5000x200条记录。全是numeric(18,2)或char(10)字段。
2)超时均设置为0(不限时)
3)如果能查出来,大约10分钟以上吧。
select Count(*) from hstore where chno='001' and pno='0001
如果很快返回,那么引发超时问题的原因不是什么索引没建好之类的,完全是因为你返回的数据集太大,构建/传递这个返回结果太耗时。
大数据量查询要用分页,这个网上有很多例子。
1)数据量大约为1000*5000*300条记录
2)所有字段都是numeric(18,2)或char(10)
3)如能查出结果,查询时间一般要10分钟以上
4)各处的查询时间均设置为0(不限时)
问题是我条件越多返回的数据集越小越超时。如原题所述,条件多时只返回一个记录就超时,而条件少时返回几十条记录则慢但是不超时。
您说的这个count(*)的方法我试一下。
试一下.去掉右左空格.
select * from hstore where rtrim(ltrim(chno))='001'
试过了,count也超时。
其实返回的数据集并不大。如前所述,条件少数据集大一些(几十条)反而不超时,条件多数据集小(1条)才超时。
索引也重新做过了(花了好几个小时),没有任何效果。
select count(*) from hstore where chno='001'
select connt(*) from hstore where no='0001'
星期天吧,星期天我才能接触数据库。
其实我写的只是示意性的。hstore里大约有800000x1000条数据。如果只有一个chno(代表商场)条件就是这个数除500。加一个stdate条件(代表日期)再除1000。加一个pno条件(代表货号)再除1000等等。
您是什么意思呢?
其实我觉得问题很简单,就是表太大。但是sqlserver是大型数据库啊,以前稍微小一点的表连foxpro这样的桌面数据库速度都很快,语言思路都类似,所以不明白。
代码好多是copy移植的。只是现在是双核的,window xp,内存2G。
所以肯定有什么问题。
1.索引有碎片
2.select * 中字段有ntext字段
3.where chno='001' and pno='0001' 条件改为where pno='0001' and chno='001' 有可能会有作用(未测试)
(2)帖出select count(*) from hstore where chno='001' and pno='0001' 的执行计划。我们猜是没办法解决问题的。
(2)帖出select count(*) from hstore where chno='001' and pno='0001' 的执行计划。 我们用猜的方法是没办法解决问题的。
表结构:.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按钮直接写直接执行。执行起来会有区别吗?
先设了主见先,然后在chno='001' and pno='0001' 上加索引...
0、对表执行dbcc checktable,检查有无错误
1、把chno与pno数据类型由char修改为varchar
2、如果这两个字段的值如果包含NULL, 全部设置为''
3、把表中的索引全删除后只建立这两个字段的索引
4、查询字段列表中只包含chno与pno查询分析器中执行语句前,选中执行计划(ctrl+K)
试过了,count一样是超时。
ALTER INDEX ALL ON 表 REBUILD