|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
操作被同步到从库上后,则主从都“回天无力”。update语句与delete语句与insert语句最年夜的分歧在于:一般利用insert语句时都是单条拔出,但update与delete则分歧,组合where前提,我能够批量操纵数据库中的数据。
在开辟中,我们只管不要一条一条往实行修正与删除语句,固然,条件是指你必要删除批量数据的时分而你又利用轮回实行单条删除的办法,由于如许做的效力会很低,实行工夫会很长。可是,假如我们一条操纵的数据量过量,又会形成数据库服务器的CPU利用率太高,假如现在有效户在利用数据库,一定会影响用户的操纵。以是,我们能够依据用户的详细情形来决意操纵体例:
1,假如是在非事情时段,则应当尽量地在一条语句中更新大概删除数据。这是完成操纵的最快办法,固然会形成数据库服务器CPU利用率太高,但由于此时没有效户在会见数据库,以是不会形成不良影响。
2,假如是在事情时段,则应当依据实践情形将update与delete语句拆分红多句来实行,每实行一段歇息一段工夫,如许固然实行工夫长了,但不会影响用户的操纵。
上面,我们就来说讲怎样让sql语句实行一段就歇息一会再实行的办法:
使用WAITFOR语句:
感化:
在到达指准时间或工夫距离之前,大概指定语句最少修正或前往一行之前,制止实行批处置、存储历程或事件。
语法:
WAITFOR
{
DELAYtime_to_pass
|TIMEtime_to_execute
|(receive_statement)[,TIMEOUTtimeout]
}
示例:
updatetable1setamout=amout*1.1whereid<200
waitfordelay00:00:00:100
updatetable1setamout=amout*1.1whereid>=200andid<=500
waitfordelay00:00:00:100
updatetable1setamout=amout*1.1whereid>500
如许,我们就把原本应当是
updatetable1setamout=amout*1.1
的语句分红了三段来实行,每实行一段,就歇息100毫秒(两头的歇息工夫应当依据分歧的服务器来设置,我们应当在测试情况中屡次测试,以算出最好歇息工夫),如许,数据库服务器的CPU利用率能够失掉分明下落。
注重:
1,实行WAITFOR语句时,该事件会处于运转形态,其他哀求不克不及在统一事件下运转。
2,WAITFOR会制止事件的处置,以是在统一事件中一切实行城市等WAITFOR实行完成才会前往了局,如:
select1
WaitForDelay00:00:05:000
select2
事件会在5秒后同时打印出1与2,而不是先打印1,守候5秒后再打印出2有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。 |
|