![mysql里储存过程中怎么进行条件判断,第1张 mysql里储存过程中怎么进行条件判断,第1张](/aiimages/mysql%E9%87%8C%E5%82%A8%E5%AD%98%E8%BF%87%E7%A8%8B%E4%B8%AD%E6%80%8E%E4%B9%88%E8%BF%9B%E8%A1%8C%E6%9D%A1%E4%BB%B6%E5%88%A4%E6%96%AD.png)
mysql>DELIMITER // mysql>CREATE PROCEDURE TestIfElse ->( ->p_val INT ->) ->BEGIN ->IF (p_val = 1) THEN ->SELECT '1' AS A->ELSEIF (p_val = 2) THEN ->SELECT '2' AS A->ELSE ->SELECT 'other' AS A->END IF->END// Query OK, 0 rows affected (0.05 sec) 上面
是一个最简单的 mysql 的 IF / ELSEIF 的例子了...这个应该不会太慢吧,我建议你看一下,你是不是循环做了太多次的插入/更新 *** 作。
mysql默认的配置中,每次事务提交都要写binlog和redo log,如果循环太多次——比如循环插入10w条记录——就会非常慢。一般优化思路分两种:
1 修改 sync_binlog为一个100-1000间的值,让binlog每隔100-1000个事务后再写一次;修改innodb_flush_log_at_trx_commit =2; 这么搞的好处是降低了写log的次数和消耗的时间,缺点是,中间出错的话,会丢失一部分的binlog和redolog导致无法通过他们来在出问题是恢复生产库数据。
2 将所有的插入/更新 *** 作放到一个事务中进行。这样,显然就只需要一次写binlong和redolog咯。
评论列表(0条)