请大家帮我看下这个奇怪问题!(100分相送)
在sql server7.0中:
假设在A表中(id,itemid)等字段,id是主键,id,itemid都是索引(int型)。我在这样查询时:
select * from A where itemid = :l_number;
正常情况下,只需要1、2秒中,就可查处所需要的信息(数据很多)。但itemid对应有几个值时,速度特别慢,要30、40秒,即使itemid的值对应的记录是空,也要那么长时间。
我在不同机器上试过,我开始以为是我的库有问题,但情况都是这样。
谢谢大家帮我解答。
问题点数:100、回复次数:15Top
1 楼leimin(黄山光明顶)回复于 2002-04-15 17:55:09 得分 10
1。试试将ITEMID的INDEX去掉?
2。安装SQL SP3,(try)Top
2 楼bzlj(bzlj)回复于 2002-04-15 19:21:14 得分 0
老大,能否说详细点,SP3是做什么用的?Top
3 楼dudupi()回复于 2002-04-15 20:52:48 得分 10
sql的补丁3Top
4 楼bluepower2008(蓝色力量)回复于 2002-04-15 21:08:09 得分 10
应该不会啊,如果你的语句是itemid in (1,2,3),那么sqlserver会自动优化的,不过不知道7.0是不是也优化。你这样试试:
select * from A where itemid = 1
union
select * from A where itemid = 2
union
select * from A where itemid = 2
这种方式可以充分利用索引。
Top
5 楼bzlj(bzlj)回复于 2002-04-15 21:40:06 得分 0
itemid = :l_number,就只是等于一个值,不存在用IN。
大哥们继续啊。我是一点都不知道怎么办了!Top
6 楼huier22(终结孤独)回复于 2002-04-15 21:52:55 得分 5
upTop
7 楼bluepower2008(蓝色力量)回复于 2002-04-16 21:25:36 得分 0
>>但itemid对应有几个值时,速度特别慢,要30、40秒
^^^^^^^
那以上这句话的对应的几个值是什么意思?Top
8 楼bzlj(bzlj)回复于 2002-04-16 22:41:12 得分 0
呵呵,不好意思。itemid = @l_number,@l_number是个单值,不是集合。Top
9 楼xjbs(大鱼)回复于 2002-04-16 22:50:56 得分 5
看不明白Top
10 楼OldMan0516(凡人0516)回复于 2002-04-17 08:12:43 得分 5
你的意思是否是这样:
如果查询itemid = :l_number只是返回一条纪录很快,
如果多条很慢?Top
11 楼PopsInSeoul(World台 星期四 18:30)回复于 2002-04-17 09:59:21 得分 40
应该oldman0516(凡人0516) 理解的对
试一下看:
把索引改一下,id的主键去掉,itemid改成簇索引。Top
12 楼bzlj(bzlj)回复于 2002-04-17 22:29:45 得分 0
to:OldMan0516(凡人0516)
这样说吧。假设有A、B两表。A(ITEMID)表是销售人员表。B(ITEMID)是销售明细表。现在想从B表中查出A销售人员的销售明细。ITEMID就是人员的ID号。
语句:
select * from tb_b where itemid = @A人员的ID;
正常情况下,1秒内就应该显示A的销售明细(1000多条),但我却等了40秒钟才显示A的销售明细。为什么?(我在查B、C、D等人员的销售明细时,用时都在一秒内。)为什么查A时会这样???
我重建过索引,没用。Top
13 楼bluepower2008(蓝色力量)回复于 2002-04-17 23:22:24 得分 0
那么B、C、D等人员的销售明细有多少条记录呢?Top
14 楼icevi(按钮工厂)回复于 2002-04-18 00:07:02 得分 10
搞不懂,应该与记录数多少有关系,但不至于慢这么多。
顺便说一下象下面这样的语句,不会有重复记录的,用union all 会快很多, 因为用UNION要排除重复项,用UNION ALL 不需要。
select * from A where itemid = 1
union all
select * from A where itemid = 2
union all
select * from A where itemid = 2
Top
15 楼leimin(黄山光明顶)回复于 2002-04-18 08:29:42 得分 5
还是把表结构贴出来会比较清楚点。
因为你的问题太奇怪?
---我在查B、C、D等人员的销售明细时,用时都在一秒内。)为什么查A时会这样???
Top




