各位老大,我的问题如下:
我有一套用ASP写的程序,有一个很复杂的查询,用的是存储过程(用邹建老大的分页存储过程改的)这套程序在一台普通PC上面显示出页面的速度是2秒以内,但是同一套程序在一台双CPU HP DL380刀片服务器上运行的速度要20秒以上,客户不能忍受这样的速度我查找了很久,如果说因为SQL语句写得不好,那应该在哪台机器上速度都一样慢才对,我现在怀疑是SQL SERVER设置或者是服务器的系统问题,已经重装了两次SQLSERVER2000,补丁打到SP4了,还是不能解决问题因为要重装服务器很麻烦,涉及很多应用,现在请教各位老大,有啥解决方法
小妹在这里谢谢了
能解决问题的,立即给分,谢谢!

解决方案 »

  1.   

    两个查询库完全一样的
    使用以下语句查询的结果
    =============================
    正常
    ============================================
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。SQL Server 执行时间: 
       CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
    SQL Server 分析和编译时间: 
       CPU 时间 = 15 毫秒,耗费时间 = 133 毫秒。(所影响的行数为 63 行)表 'User_ImpowerData'。扫描计数 1,逻辑读 12 次,物理读 2 次,预读 10 次。
    表 'Stream_BasicData'。扫描计数 2234,逻辑读 4873 次,物理读 0 次,预读 396 次。
    表 'Worktable'。扫描计数 2233,逻辑读 32233 次,物理读 0 次,预读 0 次。
    表 'Application_BasicData'。扫描计数 1,逻辑读 123 次,物理读 1 次,预读 122 次。SQL Server 执行时间: 
       CPU 时间 = 329 毫秒,耗费时间 = 816 毫秒。============================================

    ============================================
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。SQL Server 执行时间: 
       CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
    SQL Server 分析和编译时间: 
       CPU 时间 = 16 毫秒,耗费时间 = 85 毫秒。(所影响的行数为 61 行)表 'User_ImpowerData'。扫描计数 1,逻辑读 12 次,物理读 1 次,预读 6 次。
    表 'Stream_BasicData'。扫描计数 4460,逻辑读 399576 次,物理读 1 次,预读 374 次。
    表 'Application_BasicData'。扫描计数 1,逻辑读 125 次,物理读 1 次,预读 102 次。SQL Server 执行时间: 
       CPU 时间 = 9859 毫秒,耗费时间 = 9892 毫秒。
    ============================================
    DBCC DROPCLEANBUFFERS
    DBCC FREEPROCCACHE 
    set statistics io on
    set statistics time on
    go 
    SELECT t1.str_action,t1.str_tuserip,t0.* FROM application_basicdata t0 LEFT OUTER JOIN stream_basicdata t1 ON t1.str_appno=t0.app_no AND t1.str_no IN(SELECT TOP 1 str_no FROM stream_basicdata WHERE str_appno=app_no ORDER BY str_no DESC) LEFT OUTER JOIN user_impowerdata t2 ON t2.uid_userno='lixn001' WHERE CHARINDEX('004',t1.str_tdeptno)!=0 AND t0.app_finishtag='0' AND (t1.str_tuser='' AND CHARINDEX(t0.app_typeno,t2.uid_usual_apptype)!=0 AND(case t1.str_tuserip when 'uid_ip_apply' then t2.uid_ip_apply when 'uid_ip_scan' then t2.uid_ip_scan when 'uid_ip_transmit' then t2.uid_ip_transmit when 'uid_ip_ground' then t2.uid_ip_ground when 'uid_ip_finishmodify' then uid_ip_finishmodify end)='1')OR t1.str_tuser='lixn001' AND t1.str_tdeptno='004' ORDER BY t0.app_no DESC
      

  2.   

    一种方法,把你的SQL语句贴出来,让大家找毛病!
    二种方法,服务器肯定不一样!
      

  3.   

    试试 把 t1.str_no IN(SELECT TOP 1 str_no FROM stream_basicdata WHERE str_appno=app_no ORDER BY str_no DESC)  换成 
    t1.str_no =(SELECT TOP 1 str_no FROM stream_basicdata WHERE str_appno=app_no ORDER BY str_no DESC) t0.* 换成 table 里面的每一个字段
      

  4.   

    lwl0606(寒泉) 你说的方式我试过了,没有用
    gaojier1000(V2※高捷) 上面已经有贴我的语句
      

  5.   

    我仔细看了DBCC执行结果,其中,正常速度的那个服务器表 'Stream_BasicData'。扫描计数 2234,逻辑读 4873 次,物理读 0 次,预读 396 次。
    表 'Worktable'。扫描计数 2233,逻辑读 32233 次,物理读 0 次,预读 0 次。WORKTABLE应该是系统自动产生的一个临时表,我的数据库设计中并没有这个表而运行很慢的那个服务器上
    表 'Stream_BasicData'。扫描计数 4460,逻辑读 399576 次,物理读 1 次,预读 374 次。
    而且没有WORKTABLE表有高手能就这个解释一下吗
      

  6.   

    1:两个SERVER的表上用相同的索引
    2;指定索引作为查询计划,而不是让服务器优化
      

  7.   

    hillhx(曾经的曾经) 请说清楚一点,不是很明白
      

  8.   

    发现问题了,我ASP页面上用了一个COMMAND语句,调用存储过程来得到结果集,似乎是那句产生了问题,用回普通执行SQL语句方法得到结果集,不调用那个存储过程就没事了现在也只能暂时这样解决,至于那个存储过程为什么不行,小妹有空再研究研究,谢谢各位大哥,给分揭帖了