zoukankan      html  css  js  c++  java
  • 1次查询优化的过程

    基于拥有CRM系统进行扩展的过程,有一个工单的操作,数据库中tc_worksheettc_worksheet_1_1 tc_worksheet_attr tc_worksheet_mattr tc_worksheet_xattr

    工单数据同一时候存储在以上几张表中。

     

    最開始的实现方案:直接使用SQL进行表关联,大概关联了十几张表,那个时候查询出我们须要的工单大概须要20分钟左右。

     

    优化方案:使用存储过程+触发器的方式汇总一张冗余暂时表的数据。在原始的工单表中建立触发器。当用户在crm系统中工单时,调用存储过程,汇总这些数据到冗余暂时表。

    这样的缺点,存储过程中汇总的sql速度比較慢,导致用户在CRM系统中建立工单的速度受到了影响。

     

    优化方案:因为影响了crm系统中工单的操作的速度。我们想通过异步的方式实现数据的冗余同步,找到了SQLServerJob的实现方案。这样的方案实现后,发如今insert时数据没有办法同步到冗余中间表。查找了原因,意外发现了一个问题,用户在CRM系统中创建完一个工单,触发器前后共运行了13次,推測crm系统中可能是操作是首先在tc_worksheet插入主键,然后须要改动某一些这条数据中某一些字段的值。才导致触发器被多次运行。

     

    优化方案:在工单原始表和工单冗余中间表中建立另外一个中间表B。当用户工单表运行触发器后把操作的工单的id插入到中间表B中(首先推断中间表B中是否存在相应的工单字段,发现中间表B中存在该工单id,则不进行操作,否则插入工单id),在Web程序中启动一个线程,间隔一段查询中间表B中是否存在新数据,存在的话。就运行存储过程汇总工单数据到冗余中间表。不存在则休眠,等待下一次查询。

    临时没有找到更好的方案了,欢迎大家批评指正。

  • 相关阅读:
    AS400一些有用的命令
    Publish的时候某些需要用到的文件没deploy上去
    DB2一些SQL的用法
    根据PostgreSQL 系统表查出字段描述
    linux memcached 安装
    CentOS下XEN虚拟服务器安装配置
    Apache the requested operation has failed
    PHP配置兼容ZendDebugger和Optimizer
    虚拟机比较
    memcache 运行情况,内存使用
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7044749.html
Copyright © 2011-2022 走看看