SQL语句效率问题 5

数据库中有个包含100万条数据的表,使用两个SQL语句获取第599,900-600,000条数据,如下图:理论上讲,第一句的开销应该是高于第二句的,但使用SQLServe... 数据库中有个包含100万条数据的表,使用两个SQL语句获取第599,900-600,000条数据,如下图:

理论上讲,第一句的开销应该是高于第二句的,但使用SQL Server Management Studio得到的结果确是第二句的开销远高于第一句。
怎么回事?
注:获取第999,900-1,000,000条数据的时候,开销却是正常的,如下图:
附测试数据库表及数据的创建语句:
CREATE TABLE [dbo].[testTable] (
[id] INT NOT NULL,
[col1] NVARCHAR (50) NOT NULL,
[col2] NVARCHAR (50) NOT NULL,
[col3] NVARCHAR (50) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);

go

DECLARE @i INT
SET @i=1
WHILE @i<=1000000
BEGIN
INSERT INTO [testTable]([id],[col1],[col2],[col3]) VALUES(@i, 'ValueA'+CONVERT(varchar,@i),'ValueB'+CONVERT(varchar,@i),'ValueC'+CONVERT(varchar,@i))
set @i=@i+1
END
展开
 我来答
摆渡浮桥
2013-05-27 · TA获得超过3629个赞
知道大有可为答主
回答量:1610
采纳率:100%
帮助的人:2217万
展开全部
对比查询性能,不能只看语句,而是要看执行计划。即使是相同的查询语句,在不同的情况下也有可能生成不同的执行计划。

之所以一个查询性能高,是因为id字段上有聚集索引。从查询计划来看,使用了合并连接(merge join),合并连接是非常高效的连接。
而第二个查询使用了max聚合,聚合运算本身效率比较低,而且因为聚合的使用,使得不能使用合并连接,而只能使用嵌套循环(nested loop),所以效率低。
追问
那为何获取第999,900-1,000,000条数据时,第一个语句开销会增加这么多倍?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式