日期:2014-05-18 浏览次数:20591 次
select * from tb where id=(select max(ID)from tb)
select top 1 * from tb order by id desc
select top 1000000 id=identity(int,1,1) into Qas from syscolumns a,syscolumns b,syscolumns c,syscolumns d GO select top 1 * from Qas order by id desc /* 执行时间 0秒 */ select * from Qas where id=(select max(id) from Qas) /* 执行时间 1秒 */ GO drop table Qas
------解决方案--------------------
事实上,table的数据量不同,执行计划也不同,
你可以试下当Qas有1000笔和100000笔时的情况。
又要推荐一下,请看看leimin 大侠的 “一句SQL引发的思考”
执行计划有时候也会骗人的。
------解决方案--------------------
建索引后,2者好像是一样的。
------解决方案--------------------
Ⅰ
0)SELECT COUNT(ID) FROM ta
-----------
100015
Warning: Null value is eliminated by an aggregate or other SET operation.
1)加索引后两者执行计划近乎相同 一个是Index Scan 一个Index Seek,理论上Seek高于Scan
CREATE CLUSTERED INDEX tID ON ta (ID)
GO
--DROP INDEX ON ta.ID
--GO
--第一种SQL code
select *
from ta
where id=(select max(ID)from ta)
1 1 select * from ta where id=(select max(ID)from ta)
1 1 |--Top(TOP EXPRESSION:((1)))
2 1 |--Clustered Index Seek(OBJECT:([Testshen].[dbo].[ta].[tID]), SEEK:([Testshen].[dbo].[ta].[ID] IsNotNull) ORDERED BACKWARD)
--DBCC DROPCLEANBUFFERS
--第二种SQL code
select top 1 * from ta order by id desc