• DRP性能优化总结会收获


    今上午公司技术研究部(TRD)对我们系统进行了评测性能报告,指出了其中的不足和改善的方案,现选取部分总结如下:

     1. C#事务处理没有加Try , catch:

    问题描述:C#端的事务控制需要和try catch配套使用,否则出现异常后无法处理回滚。

     

    2. 表结构处理

    问题描述:VIP表增加一个InfoDate日期字段,内容为:’9999-客户生日月-客户生日’。同时,在该列上创建非聚集索引。
       添加该列是为了解决VIP表的查询中存在的大量的对BirthDay列的函数处理。
       Where条件中对列使用函数会导致索引失效,导致查询变慢

     

     

    3.Left Join和子查询的关联顺序问题

    问题描述:该类处理sql拼接时,是先在单据表上关联了很多的基本信息表后,再做的分页,这种处理会导致大量的IO浪费。

    例如:BillListDS1.cs

    建议:先做子查询分页再进行left join ,将结果集缩小到最小,效率更优

     

    4. UNION的滥用

    问题描述:不需要消除重复记录的情况下使用了UNION,UNION 比UNION ALL多了一个去重的功能,在大数据量的时候更消耗性能
    解决:改成UNION ALL

     

    5. 取总行数的方法问题

    错误方式一:取总的记录数,但却执行了不必要的left join,order by,获取了不必要的行号信息。
     问题出现频度:大量的DoSum方法都有问题

    例如:

    错误方式二:没有用count(*),而是取出所有记录,再使用 @@recordcount

     

    6. 低效的一步完成的SQL

    问题描述:把应该多步走的sql放到了一起,这种拆分思路更加明确,代码更易维护,另外执行效率也大幅提升
    解决:分成多步
    例如:单据装箱配置(BillPack_Config)

    建议:分成两步

     

    7. 表变量的滥用

    问题描述:大量使用表变量,导致数据量大时的慢查询
    解决:在不明确可能插入的记录数量级时,不要使用表变量,最好使用临时表代替表变量,因临时表存放在tempDB,物理表关联更快
    例如:存储过程pGetYKDetailsList

     

    8.可以使用Merge语句

    问题描述:存在修改,否则新增的语句可以改用Merge语句实现
    例如:BillCheckOut方法中对AgtStoAdjBill表操作的部分

     

    9.多余的事务

    问题说明:事务也是有消耗的,单独的一句delete/update操作不需要加事务
    使用频度:很多单据相关类的BillDelete/BillAudit方法都在这样使用
    例如:

     

    10. 多余的嵌套事务

    问题说明:sql语句中已经带了事务,C#代码中就不要再用事务包裹了
    例如:BillService_QT273的BillAudit方法

     

     

    11. 多余的Hint问题

      nolock提示符
    问题描述:使用了可能导致脏读的nolock提示符
    解决办法:使用快照隔离,去掉nolock提示

     

     nowait提示符
    问题描述:Select时使用了无效的提示符
    解决办法:去掉nowait

     

    12. 堆状的充满多余语句的SQL

    问题描述:语句全无对齐,可读性差,充满多余语句(Exists里面用Row_Number,Group By等)
    例如:ComClewService中的一个sql

     

    13. 存储过程的GOTO语句

    建议:不使用,太长不易维护

    例如:[dbo].[pGetGoodsPrice]

     

     

  • 相关阅读:
    561. Array Partition I
    448. Find All Numbers Disappeared in an Array
    136. Single Number
    485. Max Consecutive Ones
    463. Island Perimeter
    496. Next Greater Element I
    344. Reverse String
    【.net项目中。。】.net一般处理程序使用方法
    【ExtAspNet学习笔记】ExtAspNet控件库中常见问题
    用VS2010创建三层架构开发模式及三层架构的研究
  • 原文地址:https://www.cnblogs.com/lanjun/p/2513155.html
Copyright © 2020-2023  润新知