sql 触发器使用

    日常开发过程,由于单表查询速度变慢,原才有直接调用数据库项目表,发现影响速度:

                      原sql:如图

才有union 连接获取统计表数据,(注意:union连接获取数据能够去重,而union Alll不行

              union连接字句进行排序  order by 的时候发现不好使,需加上 limit 才行

           

          本sql  太长速度太慢,后对sql 进行优化,采用临时表type虚拟字段排序 发现速度还是太慢:

          如图:

           后才有mysql 触发器,新建表,把需要数据处理好后,放入新表:

ON DUPLICATE key UPDATE   :该函数(先判断插入是否有数据,插入时存在则更新,否则插入)

begin
      if (NEW.compare_target=0 AND left(NEW.project_status,1) in ('2','3')) then
      
       INSERT INTO `stat_proj_approve`
(
`project_id`,
`projectName`,
`update_time`,
`confirm_time`,
`approval_time`,
`approval_time_start`,
`address`,
`cityName`,
`city_code`,
`auction_status`,
`project_status`,
`projectApprovalTime`,
`InvestmentCommitteeTime`,
`type`,
`typedesc`)
VALUES
(
NEW.id,
NEW.name,
NEW.update_time,
NEW.confirm_time,
NEW.approval_time,
NEW.approval_time_start,
NEW.location_description,
(select name from t_city where code=NEW.city_code),
NEW.city_code,
NEW.auction_status,
NEW.project_status,
DATEDIFF(DATE(NOW()), NEW.confirm_time),
DATEDIFF(DATE(NOW()),NEW.approval_time),
2,
'其他'
        ) ON DUPLICATE key UPDATE   
               auction_status=NEW.auction_status,
   project_status=NEW.project_status,
   update_time=NEW.update_time,
   confirm_time=NEW.confirm_time,
   approval_time=NEW.approval_time,
   approval_time_start=NEW.approval_time_start,
   projectName=NEW.name,
   address=NEW.location_description,
   city_code=NEW.city_code,
   projectApprovalTime=DATEDIFF(DATE(NOW()), NEW.confirm_time),
   InvestmentCommitteeTime=DATEDIFF(DATE(NOW()),NEW.approval_time),
   cityName=(select name from t_city where code=NEW.city_code),
   type=(case when type=1 and NEW.auction_status in(22,13) then 2 
  when  NEW.auction_status=20 and DATEDIFF(DATE(NOW()),NEW.confirm_time)>60 then 1 
  when  NEW.auction_status=30 and DATEDIFF(DATE(NOW()),NEW.approval_time)>30 then 1
  else 2 end ) ;    
       end if;
  end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值