create or replace procedure SP_GET_NEWEST_CAPTCHA(
v_ACCOUNT_ID in VARCHAR2, --接收短信的手机号
v_Tail_num in VARCHAR2, --尾号
v_result out VARCHAR2, --结果
v_CAPTCHA out varchar2 --验证码
) is
l_recvmsgid NUMBER;
begin
--取出验证码
if (not ((v_Tail_num is null) or (v_Tail_num = ' '))) and (not ((v_ACCOUNT_ID is null) or (v_ACCOUNT_ID = ' '))) then
select in_msg_id,in_captcha
into l_recvmsgid, v_CAPTCHA
from( select t.msg_id in_msg_id, CAPTCHA in_captcha
from jp_recvmsg_carcard t
where t.tail_num = v_Tail_num
and t.account_id = v_ACCOUNT_ID
and t.msg_status = 0
order by t.msg_time desc)
where rownum = 1 ;
elsif (v_Tail_num is null) or (v_Tail_num = ' ') then
select in_msg_id,in_captcha
into l_recvmsgid, v_CAPTCHA
from( select t.msg_id in_msg_id, CAPTCHA in_captcha
from jp_recvmsg_carcard t
where t.account_id = v_ACCOUNT_ID
and t.msg_status = 0
order by t.msg_time desc)
where rownum = 1 ;
elsif (v_ACCOUNT_ID is null) or (v_ACCOUNT_ID = ' ') then
select in_msg_id,in_captcha
into l_recvmsgid, v_CAPTCHA
from( select t.msg_id in_msg_id, CAPTCHA in_captcha
from jp_recvmsg_carcard t
where t.tail_num = v_Tail_num
and t.msg_status = 0
order by t.msg_time desc)
where rownum = 1 ;
end if; --更新状态
update jp_recvmsg_carcard t
set t.msg_status = 1
where t.msg_id = l_recvmsgid;
commit;
v_result:='';
EXCEPTION WHEN OTHERS THEN
v_Result:='';
ROLLBACK;
end SP_GET_NEWEST_CAPTCHA;

优化前

create or replace procedure SP_GET_NEWEST_CAPTCHA(
v_ACCOUNT_ID in VARCHAR2, --接收短信的手机号
v_Tail_num in VARCHAR2, --尾号
v_result out VARCHAR2, --结果
v_CAPTCHA out varchar2 --验证码
) is
l_recvmsgid NUMBER;
begin if(((v_Tail_num is null) or (v_Tail_num = ' ')) and ((v_ACCOUNT_ID is null) or (v_ACCOUNT_ID = ' '))) then
v_result:='';
return;
end if;
--取出验证码
select in_msg_id,in_captcha
into l_recvmsgid, v_CAPTCHA
from( select t.msg_id in_msg_id, CAPTCHA in_captcha
from jp_recvmsg_carcard t
where (t.tail_num = v_Tail_num or (((v_Tail_num is null) or (v_Tail_num = ' '))))
and (t.account_id = v_ACCOUNT_ID) or (((v_ACCOUNT_ID is null) or (v_ACCOUNT_ID = ' ')))
and t.msg_status = 0
order by t.msg_time desc)
where rownum = 1 ; --更新状态
update jp_recvmsg_carcard t
set t.msg_status = 1
where t.msg_id = l_recvmsgid;
commit;
v_result:='';
EXCEPTION WHEN OTHERS THEN
v_Result:='';
ROLLBACK;
end SP_GET_NEWEST_CAPTCHA;

优化后

优化案例2

SQL中的排序是很耗时的,根据测试按照时间排序比按照ID排序更耗时,所以如果可以,将按照时间排序改为按照ID排序;

如果必须按照时间排序,应该在时间列上加上索引!

SQL 优化案例的更多相关文章

  1. SQL优化案例—— RowNumber分页

    将业务语句翻译成SQL语句不仅是一门技术,还是一门艺术. 下面拿我们程序开发工程师最常用的ROW_NUMBER()分页作为一个典型案例来说明. 先来看看我们最常见的分页的样子: WITH CTE AS ...

  2. mysql的sql优化案例

    前言 mysql的sql优化器比较弱,选择执行计划貌似很随机. 案例 一.表结构说明mysql> show create table table_order\G***************** ...

  3. SQL 优化案例 1

    create or replace procedure SP_GET_NEWEST_CAPTCHA( v_ACCOUNT_ID in VARCHAR2, --接收短信的手机号 v_Tail_num i ...

  4. SQL夯实基础(四):子查询及sql优化案例

    首先我们先明确一下sql语句的执行顺序,如下有前至后执行: (1)from  (2) on   (3) join  (4) where  (5)group by  (6) avg,sum...  (7 ...

  5. 数栈SQL优化案例:隐式转换

    MySQL是当下最流行的关系型数据库之一,互联网高速发展的今天,MySQL数据库在电商.金融等诸多行业的生产系统中被广泛使用. 在实际的开发运维过程中,想必大家也常常会碰到慢SQL的困扰.一条性能不好 ...

  6. sqlserver sql优化案例及思路

    始sql: SELECT TOP 100 PERCENT ZZ.CREW_NAME AS 机组, ZZ.CREW_ID, AA.年度时间, CC.当月时间, DD.连续七天时间 AS 最近七天 FRO ...

  7. 百倍性能的PL/SQL优化案例(r11笔记第13天)

    我相信你是被百倍性能的字样吸引了,不过我所想侧重的是优化的思路,这个比优化技巧更重要,而结果嘛,其实我不希望说成是百倍提升,“”自黑“”一下. 有一个真实想法和大家讨论一下,就是一个SQL语句如果原本 ...

  8. SQL 优化案例之变更表结构

    从慢日志报表中看到一条很长的SQL select id from myinfo and (( SUBSTRING_INDEX(location_axis, ) ) ) ), '$%') ) or ( ...

  9. 一则SQL优化案例

    原始sql: select CASE ) counts ,) else deadline end as deadline from t_product_credit) c group by sort ...

随机推荐

  1. macOS 安装安卓模拟器 并用charles抓包

    mac上面安装安卓模拟器并能使用charles抓包软件调研 一.Genymotion 1.先下载Virtua Box虚拟机 https://www.virtualbox.org/wiki/Downlo ...

  2. Debian Epson L455 打印机

    要使用打印机必须要在本机(或局域网其他机器)上安装打印服务,L455是网络打印机,需要IPP协议,而mDNS-scan和avahi-utils是用来发现网络打印机的服务,由于我是摸索着安装的,没太研究 ...

  3. Sql效能优化总结(续)- sql语句优化篇

    今晚继续进行Sql效能问题的分享,今天主要是一些具体的sql优化方法和思路分享,若看过后你也有其他想法,欢迎一起探讨,好了,进入今天的主题. 针对性地对一些耗资源严重的具体应用进行优化 出现效能问题时 ...

  4. JDK自带的定时任务

    import java.util.TimerTask; /** * 实现定时任务 * */ public class MyTimerTask extends TimerTask { @Override ...

  5. Mongodb搭建

    1.配置yum源,创建/etc/yum.repos.d/mongodb-org-3.2.repo文件,添加如下文件内容: [mongodb-org-3.2] name=MongoDB Reposito ...

  6. 【Python web自动化】之读取配置文件参数,利用cookie返回值进行跳过验证码进行登录操作

    当进行Python的Web自动化时,会涉及到验证码问题,该如何跳过执行呢,下面请看代码: 1.首先新建配置文件*.ini格式 config.ini [db] #基础地址: baseurl = http ...

  7. C# .Net 下 x86使用大内存的处理

    /LARGEADDRESSAWARE 选项通知链接器应用程序可处理大于 2 GB 的地址. 在 64 位编译器中,默认情况下启用此选项. 在 32 位编译器中,如果未在链接器行上指定 /LARGEAD ...

  8. Java多线程之~~~~synchronized 方法

    在多线程开发中,总会遇到多个在不同线程中的方法操作同一个数据,这样在不同线程中操作这个数据不同的顺序 或者时机会导致各种不同的现象发生,以至于不能实现你预期的效果,不能实现一致性,这时候就能够使用 s ...

  9. PDP开发环境搭建

    1. 安装git 2.创建SSH-rsa钥匙 3. 写入 gitlab 4. 克隆分支 git clone  -b  dev_pdp_minz_ep_metting   git@gitlab.csvw ...

  10. python 补充:join() , 基本数据类型的增删改查以及深浅拷贝

    #  join() join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. li = ["李李嘉诚", "麻花藤", "黄海海峰&q ...