不清楚你表的具体设计结构,所以用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的查询)如果你说的那种情况成立的话,你最好也通过这样的方式来分析一下,和数据的结构有关系
也有可能是查询的时候条件不一样你也可以提供数据和表结构让我们进一步分析一下看看
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的查询)如果你说的那种情况成立的话,你最好也通过这样的方式来分析一下,和数据的结构有关系
也有可能是查询的时候条件不一样你也可以提供数据和表结构让我们进一步分析一下看看
解决方案 »
- 问一个字段排序的问题
- 关于不同数据库间定义触发器的问题?
- 在sql server 中更新表,如果存在就更新,不存在就插入,该怎样实现?
- 客户端select getdate()的问题
- 一个表上的多个触发器执行顺序问题 在线等。。。。。。。。。。。。。。。。。。。。。。。
- 升级后无法启动
- 我是菜鸟!存储过程 where参数过长,执行无效,求解!!!
- 求命名规则,谢谢共享出来给大家作为参考
- 部分客户端用户不能连接SQL SERVER服务器的蹊跷问题!急急急急急!
- 如何打开*.dbf的文件?
- 求助:我用程序向sqlserver插进数据时,发现目的表会断断续续的插入
- 菜鸟问题:怎么样创建带参数的存储过程?
建立表: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
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秒
Select top 10 * from model where id >10000
Select top 1 * from model where id >10000
想想是不是有点奇怪呀另外Frewin(Frewin) 提议:
改种方法:
Select top 10 * from model where id >10000
Select top 1 * from model where id >10000对于id不连续的表,你那种方法就没法用了。
select top 1/10 orderid from orders where orderid NOT in (select top 100 orderid from orders)
我都试了,都是很快,不到1秒
我懂得不多,不知道是为什么,只能提供一种和你不一样的结果,仅供参考。