通過觸發器解決統計,count 問題

2021-07-05 17:11:34 字數 1987 閱讀 6577

所謂的慢,是指高併發了,mysql就痿了。sas硬碟,隨機io速率到達10~15m,io就基本是100%了。

這時就呵呵了。cpu有巨大的剩餘也沒用,記憶體也幫不上忙,只能ssd才能解決。

所謂通過程式--非同步事件之類的,去加1,減1地統計結果--好像是一種方案.

最終上線後,資料量一大,併發量一大,資料最後出來負數---尼瑪,這就是所謂的`資料一致性的bug`

最終嘗試使用mysql的觸發器解決,sql**如下:

create

table

ifnot

exists

`yuec_users`(

invite_id varchar(255)

);create

table

ifnot

exists

`total_yuec_users_invite_id` (total bigint not

null);

drop

trigger

ifexists after_insert_yuec_users;

drop

trigger

ifexists after_update_yuec_users;

drop

trigger

ifexists before_delete_yuec_users;

create

trigger after_insert_yuec_users

after

insert

on yuec_users for

each

rowbegin

if new.invite_id != '1014766'

and new.invite_id != ''

and new.invite_id is

notnull

then

update

`total_yuec_users_invite_id`

set total=`total`+1;

endif;

end;

create

trigger after_update_yuec_users

after

update

on yuec_users for

each

rowbegin

if new.invite_id != '1014766'

and new.invite_id != ''

and new.invite_id is

notnull

then

update

`total_yuec_users_invite_id`

set total=`total`+1;

endif;

if old.invite_id != '1014766' and old.invite_id != '' and old.invite_id is not null then

update

`total_yuec_users_invite_id`

set total=`total`-1;

endif;

end;

create

trigger before_delete_yuec_users

before

delete

on yuec_users for

each

rowbegin

if old.invite_id != '1014766'

and old.invite_id != ''

and old.invite_id is

notnull

then

update

`total_yuec_users_invite_id`

set total=`total`-1;

endif;

end;

通過觸發器呼叫DTS包

此觸發器的作用就是把當前上傳的excel以全域性變數的形式傳遞給dts包,然後通過dts包執行匯入資料庫中,返回執行結果。create trigger syscrmstockinfofromexcel on dbo t after insert asset ansi nulls off set no...

通過儲存過程 建立動態觸發器

author bean create date 2011 08 12 問題描述1 很多時候我們乙個模板會有很多的 例如care 專案,一共有29張表,想刪除一條單據,那麼我們要寫29條delete語句 問題描述2 如果不寫觸發器,很多時候只是 1表的資料被刪除了,剩下的 2,3,4.表的資料還會存在...

用於父子結構統計的觸發器

情景 乙個存在父子關係的表結構 要求插入,更新時 父節點 的 統計出子節點對應欄位的和 表結構 create table tree parent child id varchar2 50 not null,parentid varchar2 50 not null,need sum number 觸...