这里#MAMASITENCPI表记录数量大概一千万,#MOTHERIDT3M表记录数量1万,在两个表的MAMAID和MOTHER_ID上建有非聚集索引查询语句如下:
SELECT A.*,'T3M' AS CAMPAIGNID,'AAA' AS AMOUNTCATEGORY 
FROM #MAMASITENCPI A
WHERE A.MAMAID IN (SELECT MOTHER_ID FROM #MOTHERIDT3M)执行计划如图:
http://hi.csdn.net/space-3409307-do-album-picid-449367-goto-down.html发现性能主要耗费在 索引查找(49%) 和 RID查找(51%)上,具体情况如图
http://hi.csdn.net/space-3409307-do-album-picid-449368.html
http://hi.csdn.net/space-3409307-do-album-picid-449369.html

解决方案 »

  1.   

    SELECT A.*,'T3M' AS CAMPAIGNID,'AAA' AS AMOUNTCATEGORY 
    FROM #MAMASITENCPI A ,#MOTHERIDT3M B
    WHERE A.MAMAID =B.MOTHER_ID 
    改连接不行
      

  2.   

    SELECT A.*,'T3M' AS CAMPAIGNID,'AAA' AS AMOUNTCATEGORY 
    FROM #MAMASITENCPI A , #MOTHERIDT3M b
    WHERE A.MAMAID = b.MOTHER_ID
      

  3.   

    都差不多 in  exists都这样
      

  4.   


    多谢,已经试过了,不行!
    我有一个类似的查询 SELECT A.*,'T3M' AS CAMPAIGNID,'AAA' AS AMOUNTCATEGORY
    FROM #MAMASITENCPI A
    WHERE A.MAMAID IN ( SELECT MAMAID 
    FROM #CALLLOGNCPI 
    WHERE CAMPAIGNID='T3M' 
      AND MANUFACTORID='WYL')其中这个IN的结果集比上面#MOTHERIDT3M这个结果集要大的多,反而很快(其中#MAMASITENCPI表示用的是一个表)
    WHERE A.MAMAID IN ( SELECT MAMAID 
    FROM #CALLLOGNCPI 
    WHERE CAMPAIGNID='T3M' 
      AND MANUFACTORID='WYL'
      )
      

  5.   


    这个查询的执行计划如图:
    http://hi.csdn.net/space-3409307-do-album-picid-449385.html
      

  6.   

    还有就是查询时,CPU和内存,正常来看语句没什么优化的,
    如果慢,如果索引没问题的话,更新一下统计信息,
    如果还是机器本身哪优化的不好.
      

  7.   

    有偿专业解决
    SQL 2000、2005、2008
      

  8.   

    可以试试,在那个一千万数据的表上加一个标志字段,每次想往那个一万的表中加入一个MOTHER_ID时,更新那个一千万的表上的标志,把查询的时间分摊到其他更新的时候
      

  9.   

    try:
    SELECT A.*,'T3M' AS CAMPAIGNID,'AAA' AS AMOUNTCATEGORY
    FROM #MAMASITENCPI A 
    INNER HASH JOIN 
         #MOTHERIDT3M B
            ON A.MAMAID=B.MOTHER_ID