1。试试将ITEMID的INDEX去掉?
2。安装SQL SP3,(try)

解决方案 »

  1.   

    应该不会啊,如果你的语句是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
    这种方式可以充分利用索引。
      

  2.   

    itemid = :l_number,就只是等于一个值,不存在用IN。
    大哥们继续啊。我是一点都不知道怎么办了!
      

  3.   

    >>但itemid对应有几个值时,速度特别慢,要30、40秒
                   ^^^^^^^
    那以上这句话的对应的几个值是什么意思?
      

  4.   

    呵呵,不好意思。itemid = @l_number,@l_number是个单值,不是集合。
      

  5.   

    你的意思是否是这样:
    如果查询itemid = :l_number只是返回一条纪录很快,
    如果多条很慢?
      

  6.   

    应该oldman0516(凡人0516) 理解的对试一下看:
    把索引改一下,id的主键去掉,itemid改成簇索引。
      

  7.   

    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时会这样???
    我重建过索引,没用。
      

  8.   

    那么B、C、D等人员的销售明细有多少条记录呢?
      

  9.   

    搞不懂,应该与记录数多少有关系,但不至于慢这么多。
    顺便说一下象下面这样的语句,不会有重复记录的,用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
      

  10.   

    还是把表结构贴出来会比较清楚点。
    因为你的问题太奇怪?
    ---我在查B、C、D等人员的销售明细时,用时都在一秒内。)为什么查A时会这样???