SELECT TOP 1000 *  FROM [in4].[dbo].[yonghubiao]
  where gonghao='123456' 
  union all
 SELECT TOP 1000 *  FROM [in4].[dbo].[yonghubiao]
  where gonghao='23456'
  union all 
    SELECT TOP 1000 *  FROM [in4].[dbo].[yonghubiao]
where gonghao='456789'
与这句SELECT TOP 1000 *  FROM [in4].[dbo].[yonghubiao]
  where gonghao in ('123456' ,'23456', '456789')
哪句的效率相对高一点?
表里有5000条数据,有33列
我看执行计划里
第一种:
表 'yonghubiao'。扫描计数 3,逻辑读 708 次,物理读 0 次,预读 0 次。(2 行受影响)(9 行受影响)第二种:
表 'yonghubiao'。扫描计数 1,逻辑读 236 次,物理读 0 次,预读 0 次。(2 行受影响)(4 行受影响)
看起来应该是第二种的效率更高些,是不是?

解决方案 »

  1.   

    单纯看这里,显然第二种好点呀,没必要每次都TOP1000
      

  2.   

    2个完全不同的sqltop没有order by,总觉得不确定
      

  3.   


    如果top n的n远大于实际记录,完全可以不用top n的
    这样2个语句可能会被自动优化为一样的了
      

  4.   

    我去掉了top 1000后,执行计划(”消息“)的结果是一样的。
    sql server 2008
    http://topic.csdn.net/u/20091114/18/5b7ba5ee-5683-4625-a50d-3602b70d273d.html
    这个是我上次问的,结果回答的不一样
      

  5.   


    SELECT *
      FROM [in4].[dbo].[yonghubiao]
      where gonghao ='10975' or gonghao='10154' or gonghao='456789'和
    SELECT TOP 1000 *  FROM [in4].[dbo].[yonghubiao]
      where gonghao in ('123456' ,'23456', '456789')
    结果是一样的:
    表 'yonghubiao'。扫描计数 1,逻辑读 236 次,物理读 0 次,预读 0 次。(2 行受影响)(3 行受影响)