由于前两天换了个服务器,导致我sql在查询某些语句的时候很慢,后来我就跟踪某些特定语句,发现一个问题。
后来总结出一个简单的对比sql语句select * from plandetail where isu8=4 当执行这条的时候,新服务器。扫描计数 16,逻辑读 12040 次,物理读 0 次,预读 0 次。 扫描计数 一直是16老服务器是扫描计数 1.查询其他的表都还差不多,我的数据库是整个考到新服务器的,而且看了两个服务器的plandetail这个表结构,没差异啊。
为什么我这个表查询时扫描计数 16 ,这是什么问题。
谢谢了。
后来总结出一个简单的对比sql语句select * from plandetail where isu8=4 当执行这条的时候,新服务器。扫描计数 16,逻辑读 12040 次,物理读 0 次,预读 0 次。 扫描计数 一直是16老服务器是扫描计数 1.查询其他的表都还差不多,我的数据库是整个考到新服务器的,而且看了两个服务器的plandetail这个表结构,没差异啊。
为什么我这个表查询时扫描计数 16 ,这是什么问题。
谢谢了。
老服务器是Standard Edition
跟着有关系吗?
老的快多了,同样的老服务器扫描计数 1,新的还是16.
难道跟sql 的版本有关,
我新服务器的sql,是Personal Edition
老服务器是Standard Edition
老的才4G内存,2.2GHZ
有限制。
sort/topn sort 成本:41% plandetail.PK_plandetail 19%老服务器:select 成本:0% sort/topN sort 成本:95% plandetail.Pk_plandetail 成本:5%
sp_configure 'max degree of parallelism', 1
go
reconfigure with override
我新服务器的sql,是Personal Edition
老服务器是Standard Edition我换成服务器版的看看,
CREATE NONCLUSTERED INDEX INDEX_planId ON plandetail (planId)
CREATE NONCLUSTERED INDEX INDEX_isu8 ON plandetail (isu8)
速度是快了,但还是没有老服务器快。
当isu8为0时查询速度快了。当为1或者2时就慢了,表里面0的数据最少,1,其次,2最多。
当速度快,isu8=0 时,没有parallelism/Gather Streams 并行处理,
当速度慢,isu8=1 or 2时 就有parallelism/Gather Streams
后来我把并行关闭,速度就快多了。
但跟老的比较起来还是慢点(以毫秒算),在sql里我新服务器是16个处理器,怎么并行还慢呢?
而老服务器虽然这两个字段没索引但还是比新的要快点。。难道真的跟sql 的版本有关。
先就这样了,速度问题暂时解决,,如果还不行,我就打算换企业版。