测试sql: 表结构: 单这句测试,看执行计划根本看不出区别。 |--Compute Scalar(DEFINE:([Expr]=CONVERT_IMPLICIT(int,[Expr],0))) |--Stream Aggregate(DEFINE:([Expr]=Count(*))) |--Nested Loops(Inner Join, WHERE:([northwind].[dbo].[tbtext].[id] as [b].[id]=[northwind].[dbo].[tbtext].[id] as [a].[id])) |--Table Scan(OBJECT:([northwind].[dbo].[tbtext] AS [a])) |--Table Spool |--Table Scan(OBJECT:([northwind].[dbo].[tbtext] AS [b])) r2: sp4: 比较 和 的执行就能发现 的cpu 时间明显比 高, 的worktable 逻辑读取量,比的高, 这个有个worktable 的扫描技术,的是,的是1,这个让人难免有的疑惑是什么情况,都是nest loop,worktable 扫描不应该是1才对。 性能差怎么大会不会是 worktable 搞的鬼呢? 那么就开始调节,过滤id 会有啥发现呢? r2: SELECT COUNT(1) FROM dbo.tbtext a INNER LOOP JOIN dbo.tbtext b ON a.id = b.id WHERE a.id <= option (maxdop 1) |--Compute Scalar(DEFINE:([Expr]=CONVERT_IMPLICIT(int,[Expr],0))) |--Stream Aggregate(DEFINE:([Expr]=Count(*))) |--Nested Loops(Inner Join, WHERE:([northwind].[dbo].[tbtext].[id] as [b].[id]=[northwind].[dbo].[tbtext].[id] as [a].[id])) |--Table Scan(OBJECT:([northwind].[dbo].[tbtext] AS [a]), WHERE:([northwind].[dbo].[tbtext].[id] as [a].[id]<=())) |--Table Spool |--Table Scan(OBJECT:([northwind].[dbo].[tbtext] AS [b]), WHERE:([northwind].[dbo].[tbtext].[id] as [b].[id]<=())) sp4: |--Compute Scalar(DEFINE:([Expr]=Convert([Expr]))) |--Stream Aggregate(DEFINE:([Expr]=Count(*))) |--Nested Loops(Inner Join, WHERE:([b].[id]=[a].[id])) |--Table Scan(OBJECT:([Northwind].[dbo].[tbtext] AS [a]), WHERE:([a].[id]<=)) |--Table Spool |--Table Scan(OBJECT:([Northwind].[dbo].[tbtext] AS [b])) 进入 lazy spool的数据完全不一样了, 只是进入了 条数据,但是 全都进去了。 在逻辑读上面 明显低于 . cpu时间也明显比少。 通过调节id 的值, 我推出了一个公式 逻辑读= +(*n) , 但是的算法十分奇怪, 当n < 时 逻辑读=3+4(n-1) 当 <=n<= 逻辑读= +5(n-) 的逻辑读是线性增长, 是分段的线性增长,每个分段 f '(x) 都不一样。 的lazy spool适合选择度高的,选择度低的时候完全不行。 从到 不单单是多了sqlos和表面上的一些功能,很多执行计划的操作符都被重写了,像lazy spool 。 所以在升级到 之前, 各位朋友,是否都应该重写一下sql 呢?单单优化 索引 已经解决不了根本问题了。
推荐整理分享SQLServer 2000 升级到 SQLServer 2008 性能之需要注意的地方之一(sqlserver升级到2016),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:sqlserver2005升级到2008,sqlserver2005升级到2008,sqlserver2005升级2008步骤,sqlserver升级到2016,sqlserver2000升级到2008r2,sqlserver2005升级2008r2,sqlserver2000升级到2008,sqlserver2000升级到2008r2,内容如对您有帮助,希望把文章链接给更多的朋友!
数据库中聚簇索引与非聚簇索引的区别[图文] 在《数据库原理》里面,对聚簇索引的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的解释是:索引顺序与数据物理排列顺序无关
SQL SERVER 与ACCESS、EXCEL的数据转换方法分享 在Transact-SQL语句中,我们主要使用OpenDataSource函数、OPENROWSET函数,关于函数的详细说明,请参考SQL联机帮助。利用下述方法,可以十分容易地实现SQLSERVE
sqlserver 中创建用户的图文方法 一旦被黑客获取到webshell,黑客就知道了你的sqlserver管理员密码,如果sqlserver再没有经过安全设置那么黑客很容易就提权并新建系统管理员账号,那么