求一优化的存储过程表A int  nvarchar
    IdA    TypeA
     1      技术部
     2      美工部
     3      业务部
     ...      ....表B  int   nvarchar   int 
     IdB   Name       IdA 
      1     JG         1
      2    周杰杰      1
      3    Scofield    3
     ...    ...       ...
在表B中 查出 表A中几个类型的前1000条数据出来 由于表B中百万级数据  查的特别慢 严重影响速度
例: 
SELECT TOP 1000 * FROM 表B  WHERE IdA in( 1,2,3..... )
或 SELECT TOP 1000 * FROM 表B WHERE EXISTS (1,2,3....)想请教高手除了弄个临时表 还有什么办法快点没 数据我只要前一千条 最好是存储过程我想写一个存储过程

解决方案 »

  1.   

    --这样呢
    select  top 1000 *
    from ta a ,tb b 
    where a.ida=b.ida
      

  2.   

    SELECT  * FROM 表B T 
    WHERE IDB IN(SELECT TOP 1000 IDB FROM B WHERE IDA=T.IDA ORDER BY ID  )先取B表的每个类型前1000条吧,楼主IDB是自增列?加上索引试试再连接表A,
      

  3.   


    我用的是 SQL 2008  这两个函数怎么用啊这样还是一样慢 而且我是有条件的去查询
      

  4.   


    idB 是属于 idA的一个类型
      

  5.   

    你IDA上有没有加索引,非聚集?
      

  6.   

    SELECT  * FROM 表B T 
    WHERE IDB IN(SELECT TOP 1000 IDB FROM B WHERE IDA=T.IDA ORDER BY ID  )SELECT  * FROM 表B T 
    WHERE (SELECT COUNT(IDB) FROM B WHERE IDA=T.IDA AND ID<=T.ID)<=1000那就先试这2个吧