由于前两天换了个服务器,导致我sql在查询某些语句的时候很慢,后来我就跟踪某些特定语句,发现一个问题。
后来总结出一个简单的对比sql语句select * from plandetail where isu8=4   当执行这条的时候,新服务器。扫描计数 16,逻辑读 12040 次,物理读 0 次,预读 0 次。  扫描计数 一直是16老服务器是扫描计数 1.查询其他的表都还差不多,我的数据库是整个考到新服务器的,而且看了两个服务器的plandetail这个表结构,没差异啊。
为什么我这个表查询时扫描计数 16 ,这是什么问题。
谢谢了。

解决方案 »

  1.   

    补充下,我新服务器的sql,是Personal Edition
    老服务器是Standard Edition
    跟着有关系吗?
      

  2.   

    isu8这个字段有没有建立索引,老服务器应该有索引吧!估计是进行了全表扫描。
      

  3.   

    我刚才把新服务器的数据库又考到老服务器上,结果运行,还是老服务器快。两个服务器查询的结果是一样的。
    老的快多了,同样的老服务器扫描计数 1,新的还是16.
    难道跟sql 的版本有关,
    我新服务器的sql,是Personal Edition
    老服务器是Standard Edition
      

  4.   

    我新服务器,16个G的内存。2.4GHz Cpu
    老的才4G内存,2.2GHZ
      

  5.   

    干什么用Personal Edition
    有限制。
      

  6.   

    新服务器:select 成本:0%  top 成本:0% parallelism/Gather Streams 成本:40%
    sort/topn sort 成本:41%  plandetail.PK_plandetail 19%老服务器:select 成本:0%  sort/topN sort 成本:95%  plandetail.Pk_plandetail 成本:5%
      

  7.   

    难道是并行计划造成的?关闭并行计划试试呢?
    sp_configure 'max degree of parallelism', 1
    go
    reconfigure with override
      

  8.   

    还是等晚上下班后,我换数据库的版本看看,,现在不敢乱试,服务器正在运行。。
    我新服务器的sql,是Personal Edition
    老服务器是Standard Edition我换成服务器版的看看,
      

  9.   

    我没有换成企业版,昨天,我在plandetail 表上给两个字段补上了索引,
    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 的版本有关。
    先就这样了,速度问题暂时解决,,如果还不行,我就打算换企业版。