应该不会啊,如果你的语句是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 这种方式可以充分利用索引。
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时会这样??? 我重建过索引,没用。
那么B、C、D等人员的销售明细有多少条记录呢?
搞不懂,应该与记录数多少有关系,但不至于慢这么多。 顺便说一下象下面这样的语句,不会有重复记录的,用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
select * from A where itemid = 1
union
select * from A where itemid = 2
union
select * from A where itemid = 2
这种方式可以充分利用索引。
大哥们继续啊。我是一点都不知道怎么办了!
^^^^^^^
那以上这句话的对应的几个值是什么意思?
如果查询itemid = :l_number只是返回一条纪录很快,
如果多条很慢?
把索引改一下,id的主键去掉,itemid改成簇索引。
这样说吧。假设有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时会这样???
我重建过索引,没用。
顺便说一下象下面这样的语句,不会有重复记录的,用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
因为你的问题太奇怪?
---我在查B、C、D等人员的销售明细时,用时都在一秒内。)为什么查A时会这样???