不清楚你表的具体设计结构,所以用Northwind的例子分析一下供你参考:
use northwind
goselect top 1 orderid from orders where orderid NOT in (select top 100 orderid from orders)select top 10 orderid from orders where orderid NOT in (select top 100 orderid from orders)我建议你通过<Crtl> + <L>比对分析Excution Plan可以明显的得到Top 10要比Top 1的耗费来的大(1.多了Filter的耗费,2.查询时候多了Index Scan的查询)如果你说的那种情况成立的话,你最好也通过这样的方式来分析一下,和数据的结构有关系
也有可能是查询的时候条件不一样你也可以提供数据和表结构让我们进一步分析一下看看

解决方案 »

  1.   

    换了个表测试,结果同样是select top 1 比select top 10慢许多!表是如下方法建立的,
    建立表:CREATE TABLE [TestTable] (
     [ID] [int] IDENTITY (1, 1) NOT NULL ,
     [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
     [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
     [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
     [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO 插入数据:(2万条,用更多的数据测试会明显一些)
    SET IDENTITY_INSERT TestTable ONdeclare @i int
    set @i=1
    while @i<=20000
    begin
        insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
        set @i=@i+1
    endSET IDENTITY_INSERT TestTable OFF
      

  2.   

    我刚测试过:
    select top 10 orderid from orders where orderid NOT in (select top 100 orderid from orders)需要的时间不到1秒
    select top 1 orderid from orders where orderid NOT in (select top 100 orderid from orders)
    需要的时间24秒
      

  3.   

    改种方法:
    Select top 10 * from model where id >10000
    Select top 1  * from model where id >10000
      

  4.   

    Frewin(Frewin)里做的测试和我自己的差不多,我的也是select top 10不到1秒,select top 1近20秒
    想想是不是有点奇怪呀另外Frewin(Frewin) 提议:
    改种方法:
    Select top 10 * from model where id >10000
    Select top 1  * from model where id >10000对于id不连续的表,你那种方法就没法用了。
      

  5.   

    不明白,我也试了一下,不过top1 和top10 都是瞬间搞定的
      

  6.   

    你的TestTable 和Sundery(我是个瓶子~) 的
    select top 1/10 orderid from orders where orderid NOT in (select top 100 orderid from orders)
    我都试了,都是很快,不到1秒
    我懂得不多,不知道是为什么,只能提供一种和你不一样的结果,仅供参考。