优化MySQL ifelif和else逻辑

山塔诺

MySQL存储过程的这一部分工作正常,但是速度很慢。有什么方法可以优化它吗?

IF (p_regid >0 AND p_submittedqueId>0 AND p_saveresponse=True)  then  
        if not exists(select * from  responseok where regid=p_regid AND QID =p_submittedqueId and TestId=p_TestId) AND (p_COption!='' or p_responsetext!='') then 

            insert into  responseok (regid,TestId,QID,Response,ResponseText,timestamp)  
            select p_regid,p_testId,p_submittedqueId,p_COption,p_responsetext,now(3);

         elseif (p_responsetext ='' AND p_COption='') then 
            insert into responsehistory (regid,TestId,QID,timestamp)  
            select p_regid,p_testId,p_submittedqueId,now(3);
            delete from  responseok where regid =p_regid and QID =p_submittedQueId AND TestId=p_TestId;
         else 
            insert into responsehistory (regid,TestId,QID,timestamp)  
            select p_regid,p_testId,p_submittedqueId,now(3);
            delete from  responseok where regid =p_regid and QID =p_submittedQueId AND TestId=p_TestId;
            insert into  responseok (regid,TestId,QID,Response,ResponseText,timestamp)  
            select p_regid,p_testId,p_submittedqueId,p_COption,p_responsetext,now(3);
         end if;
end if;

如果将代码更改为以下代码,它将返回相同的结果吗?

IF (p_regid >0 AND p_submittedqueId>0 AND p_saveresponse=True AND p_COption!='' or p_responsetext!='')  then  
        if not exists(select * from  responseok where regid=p_regid AND QID =p_submittedqueId and TestId=p_TestId) then

            insert into  responseok (regid,TestId,QID,Response,ResponseText,timestamp)  
            select p_regid,p_testId,p_submittedqueId,p_COption,p_responsetext,now(3);

         else 
            insert into responsehistory (regid,TestId,QID,timestamp)  
            select p_regid,p_testId,p_submittedqueId,now(3);
            delete from  responseok where regid =p_regid and QID =p_submittedQueId AND TestId=p_TestId;
        end if;
         else 
            insert into responsehistory (regid,TestId,QID,timestamp)  
            select p_regid,p_testId,p_submittedqueId,now(3);
            delete from  responseok where regid =p_regid and QID =p_submittedQueId AND TestId=p_TestId;
            insert into  responseok (regid,TestId,QID,Response,ResponseText,timestamp)  
            select p_regid,p_testId,p_submittedqueId,p_COption,p_responsetext,now(3);
         end if;

会提高性能吗?

如果将逻辑“如果不存在”更改为“ select 1 into some_var”,会更快吗?

尼尔·N

“如果不存在”行很可能是罪魁祸首,它必须检查整个表以确保每条记录都不符合您的条件。确保where子句中的每一列(regid,QID和TestId)每个都有索引。这应该允许数据库引擎更快地过滤出不匹配的记录。或者,您可以考虑尝试进行重构,以便仅在单个索引字段上进行搜索。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MYSQL-索引和优化选择查询

来自分类Dev

MySQL删除和优化非常慢

来自分类Dev

MySQL优化嵌套的SELECT和INSERT语句

来自分类Dev

优化使用IN和MAX(date)的MySQL查询

来自分类Dev

MySQL 通过连接和 wheres 优化排序

来自分类Dev

if-else样式和优化

来自分类Dev

if-else优化和陷阱?

来自分类Dev

使用Count和2个表的MYSQL查询优化问题

来自分类Dev

在Select和where子句中优化MYSQL查询TIMEDIFF

来自分类Dev

使用 UNION 和 DISTINCT 优化 MySQL 选择查询

来自分类Dev

MySQL选择查询优化和限制如何在MySQL中工作

来自分类Dev

结果集中的mysql“和”逻辑

来自分类Dev

MySQL是否将WHERE x> = 0和x <= 0优化为WHERE x = 0?

来自分类Dev

如何优化不重复关键字和ips的mysql查询?

来自分类Dev

通过列和WHERE子句条件的顺序同步进行MySQL查询优化

来自分类Dev

MySQL-优化-使用具有多个的group_concat和联接

来自分类Dev

MySQL 在触发器中使用 min 和 limit 优化查询

来自分类Dev

如果else语句过多,是否可以优化,因为“索引”变量逻辑每个循环递增1?

来自分类Dev

通过逻辑&&和||表示if else else

来自分类Dev

优化太多 if else 条件

来自分类Dev

优化 if -else 语句 Ask

来自分类Dev

laravel MySQL查询优化

来自分类Dev

MySQL优化庞大的查询

来自分类Dev

慢IN()MySQL查询优化

来自分类Dev

MySQL MAX查询优化

来自分类Dev

mysql查询优化任务

来自分类Dev

优化MySQL或表设计

来自分类Dev

MySQL查询优化与调试

来自分类Dev

MySQL“ NOT IN”查询优化