日期:2014-05-18  浏览次数:20460 次

取数据下面哪句sql语句效率高(100分)
有100w条数据
去中间10w-11w条数据
下面哪个方法效率高?
1.
SELECT   top   10000   [ID]
            ,[GUID]
            ,[Name]
    FROM  
(
SELECT   top   110000   [ID]
    ,[GUID]
    ,[Name]
    FROM   [Test]
order   by   id
)   as   t
order   by   id   desc

2.
SELECT   top   10000   [ID]
    ,[GUID]
    ,[Name]
    FROM   [Test]
where   id   not   in  
(
SELECT   top   100000   [ID]
    FROM   [Test]
order   by   id
)
order   by   id

------解决方案--------------------
没测试过,个人认为第二个高
------解决方案--------------------

第一个,第一个只扫描一次,二第二个扫描两次!

个人认为!
------解决方案--------------------
第一个高
------解决方案--------------------
应该是第一个
------解决方案--------------------
问题是结果的排序并不相同

------解决方案--------------------
第一个应该效率要高一些。

这个应该效率应该更好:

select top 10000 [ID],[GUID],[Name]
from [Test] a
left join (select top 110000 [ID] from [Test]) b
on a.[ID]=b.[ID]
where b.[ID] is null

------解决方案--------------------
第一个高 ...

在查询分析器执行
然后看执行计划就知道了.
------解决方案--------------------
相比较而言,第一个效率高.
第二个不出意外,其运行时间将在一个小时以上.


------解决方案--------------------
第一个
------解决方案--------------------
个人认为第一个高,其实这都不是效率高的,应该先查前100000的最大id再top 10000 应该效率会高些
------解决方案--------------------
第一个

------解决方案--------------------
第一个效率要高一些
------解决方案--------------------
第一个高,第二个用了
not in
------解决方案--------------------
在查询分析器里面测试下,必要的时候也要设置下索引,用索引去查询速度快很多
------解决方案--------------------
1
------解决方案--------------------
第一个
在查询分析器执行
然后看执行计划就知道了.

------解决方案--------------------
不管是用ID或者GUID,我觉得都是第一个高,首先不管not in是不是能使用索引,第一种方法,先从100W中取11W,使用top,无疑是比较快了,然后再从11W中取一万,他要扫描的数据最大就是:100W+11W
第二种方式,先从100W取10W,再在100W里面取1W,因为有条件,所以他要扫描的数据量就是:
11W+10W~100W+100W,所以,从数量级上看,第二种方法最好的情况就是和第一种最差的情况所扫描的数据一样多。
这中间的差距显而易见!
------解决方案--------------------
很明显第一个好,测试一下就知道了。

因为第一个执行了一次表扫描
第2个执行了2次扫描 还进行了一次Merge join