`

两句SQL对比

sql 
阅读更多
--very very bad code
select distinct t.* from t_team a
cross apply
(select top 1 LTRIM(RTRIM(clinename)) as clinename,cteamcode from t_team
where LTRIM(RTRIM(a.clinename)) = LTRIM(RTRIM(clinename)) and dbgndate > GETDATE() order by LTRIM(RTRIM(clinename)) desc) as t order by t.clinename


引用

SQL Server 分析和编译时间:
   CPU 时间 = 13 毫秒,占用时间 = 13 毫秒。

SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(835 行受影响)
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 't_team'。扫描计数 297266,逻辑读取 24862537 次,物理读取 27 次,预读 3922 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
   CPU 时间 = 654313 毫秒,占用时间 = 167921 毫秒。

====================================================================

--good code
select * from (
select cteamcode,clinename,ROW_NUMBER() over 
(partition by clinename order by dbgndate) rownum from t_team where dbgndate > GETDATE()
)t
where t.rownum<2
order by 2,3


引用

SQL Server 分析和编译时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(835 行受影响)
表 't_team'。扫描计数 1,逻辑读取 87 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
   CPU 时间 = 31 毫秒,占用时间 = 80 毫秒。


虽然能得到相同的结果,但是过程是多么不同!!!
select COUNT(1) from t_team
--297261
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics