觸發器不可以亂用

2021-05-21 21:44:23 字數 927 閱讀 3961

突然發現有乙個語句

update dnt_users set adminid = 0 where groupid = 7

執行得特別慢,更新的資料是四萬多條記錄, 表裡也是有四萬多條記錄。

在檢視後發現庫里有乙個觸發器

if exists (select name from sysobjects

where name = 'tr_updateusername' and type = 'tr')

drop trigger tr_updateusername

gocreate trigger tr_updateusername

on dnt_users

for update

asbegin

------------------------(1)-------------------

------------------------(1)-------------------

end這個觸發器主要是用來當dnt_users這個表的username更新時,同時更新其它表的。

一開始以為是觸發器裡的(1)位置的語句不夠優化的原因,但是後來就在(1)位置定義了乙個變數,沒有其它任何操作,更新時也是很慢。

當把觸發器刪除了,才變快。

在網上查了下資料:

在大量併發的情況下,使用觸發器是很危險的事。在併發量大的系統中觸發器很影響效能的.

如果非用不可,一定要注意sql的質量.

對效能的影響大小跟sql的質量關係很大.不能一概而論.觸發器多不是好事:  

第一:一定會影響效能,若是資料量大時,每次都要觸發上百上千觸發器可想而知  

第二:基於維護方面,不談有多少觸發器,當每修改一次觸發表相應觸發器就失效,符出代價可想而知.  

不建義多用觸發器,用函式與過程代替之.

看來以後還是要多注意觸發器的使用

CURL不可以讀寫檔案

最近在學es elastic search 參考裡面翻譯的官方權威指南 後面發現官網已經推出了中文版文件了 裡面有的例子把訪問es的命令做了簡化如下 curl xget localhost 9200 count?pretty d 簡化為 get count 一開始我以為是es報的錯,進es的日誌,發...

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...

nyoj 1071 不可以! 水

時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 判斷 兩個數x y的正負性。要求 不可以使用比較運算子,即 輸入 有多組資料,每組資料佔一行,每一行兩個數x,y。x y保證在int範圍內。輸出 每組資料輸出佔一行。如果兩個數是一正一負,輸出 signs are opposit...