一次遗留系统的SQL Server 2008速度调优

本文介绍了如何优化SQL Server 2008中的一个遗留系统,该系统存在分页查询效率低下的问题。通过分析代码和SQL语句,发现由于查询了不必要的字段导致大量数据库IO。通过删除无用字段和优化子查询,性能显著提升,从最初的8-10s降低到0.6秒。此外,还尝试了添加索引但未见明显效果。文章强调了代码维护和性能优化的重要性。
摘要由CSDN通过智能技术生成

系统与问题简介

  • 后端:C# + 封装的SQL查询框架
  • 数据库:SQL Server 2008
  • 问题:SQL查询极慢,分页查询100条需要8-10s
问题排查

查询慢SQL语句

SELECT TOP 10 QS.creation_time,
              SUBSTRING(ST.text, (QS.statement_start_offset / 2) + 1,
                        ((CASE QS.statement_end_offset
                              WHEN - 1 THEN DATALENGTH(st.text)
                              ELSE QS.statement_end_offset END - QS.statement_start_offset) / 2) + 1)
                  AS statement_text,
              ST.text,
              QS.total_worker_time,
              QS.last_worker_time,
              QS.max_worker_time,
              QS.min_worker_time
FROM sys.dm_exec_query_stats QS
         CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE 1 = 1
  and QS.creation_time BETWEEN '2020-10-16 8:40:00' AND '2020-10-16 8:50:00'
  AND ST.text LIKE '%%'
  AND total_worker_time > 2000000
ORDER BY QS.creation_time DESC

结果

SELECT a.ordersid                                   AS ordersid,
       a.projectid                                  AS projectid,
       a.orders                                     AS orders,
       a.names                                      AS names,
       a.wbs                                        AS wbs,
       a.wbs4TP                                     AS wbs4TP,
    	-- 中间省略30列....
       CONVERT(NCHAR(10), a.actualTurningdate, 120) AS actualTurningdate,
       CONVERT(NCHAR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值