SQL文本如下,表本身很小,走全表扫描也很快,但因业务重要性,要求尽可能缩短查询时间(为保证客户隐私,已经将注释和文字部分去掉):

SELECT MERCHCODE AS R_MERCHCODE,TRANDATE,TRANTIME,TRANTYPE AS TRANSTYPE,TRACENO,POSID AS R_POSID,ACCOUNT AS R_CARDNO,AMT,FEE,NVL(RESERVED1,'N') BORDERCARDBUSIFLAG,CASE WHEN I.BANCSRETFLAG='0000' THEN '1'WHEN  I.BANCSRETFLAG='9999' THEN'0'ELSE '2' END AS RETURNCODE
FROM IC_MERCHTRANSDETAIL_428 I
WHERE
GETACCTNO(ACTSTLACCTNO)=GETACCTNO('14250000000454865') AND ROWNUM < 500;

执行计划如下:

可以看到谓词信息是客户号,可以确定此列选择性非常高,非常适合建立索引。

CREATE INDEX IDX_GETACCTNO ON IC_MERCHTRANSDETAIL_428 (GETACCTNO(ACTSTLACCTNO)) PARALLEL 10 TABLESPACE REPT*
ERROR at line 1:
ORA-30553: The function is not deterministic

确定函数本身不会受到不确定值的影响,创建函数索引。

加上deterministic并且取别名,查看函数创建语句:

CREATE OR REPLACE FUNCTION GETACCTNOCY (acct varchar2) return varchar2 DETERMINISTIC
is
tmpacct varchar2(40);
st_res  varchar2(40);  --st_res:=tmpacct
begin
tmpacct:='';
st_res :='';
IF (length(trim(acct))=16) THEN
BEGINSELECT ACCOUNTINTO tmpacctFROM LINK_LWHERE LINK_L.CARD=LPAD(trim(acct),20,0)AND ISO_TYPE='1'AND CATEGORY='0';
EXCEPTIONWHEN NO_DATA_FOUND THENtmpacct:=TRIM(ACCT);
END;END IF;
IF(length(trim(acct))>17) THENBEGINSELECT zhINTO tmpacctFROM load_zhmapWHERE jzh=trim(acct);EXCEPTIONWHEN NO_DATA_FOUND THENtmpacct:='';END;
END IF;IF(length(trim(acct))=17) THENtmpacct:=substr(acct,1,16);END IF;
st_res:=tmpacct;
return st_res;
EXCEPTION
WHEN OTHERS THEN
return '';
END;

创建索引:

CREATE INDEX IDX_GETACCTNO ON IC_MERCHTRANSDETAIL_428 (GETACCTNOCY(ACTSTLACCTNO)) TABLESPACE TBSIDX;

创建索引后的执行计划如下:

案例较为简单,希望可以帮助到大家。

|  作者简介

姚崇·沃趣科技高级数据库技术专家

熟悉Oracle数据库内部机制,丰富的数据库及RAC集群层故障诊断、性能调优、OWI、数据库备份恢复及迁移经验。

SQL优化案例-自定义函数索引(五)相关推荐

  1. SQL Server中自定义函数和游标应用的经典案例

    2019独角兽企业重金招聘Python工程师标准>>> SQL Server中自定义函数和游标应用的经典案例 转载于:https://my.oschina.net/zhddzr/bl ...

  2. 数据库周刊54丨2020 年度报告:PingCAP、腾讯云数据库、人大金仓、GoldenDB ;CPU 100% SQL优化案例;Mysql内存溢出处理;避免删库跑路黑天鹅……

    热门资讯 [1.PingCAP 2020 年度报告|相信开放的力量 [摘要]本文为PingCAP 2020年度报告.盘点了PingCAP里程碑大事件:完成D轮2.7亿美元融资,创造全球数据库历史新的里 ...

  3. 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化

    25.数据查询与写入优化 25.1.分布式子查询优化 25.1.1.分布式表的IN查询示例1(普通IN子查询.IN子查询为本地表) 25.1.2.分布式表的IN查询示例2(普通IN子查询.IN子查询为 ...

  4. 崔华 oracle简历,2013数据库大会:崔华-基于Oracle的SQL优化案例分析

    2013数据库大会:崔华-基于Oracle的SQL优化案例分析 崔华的新书即将出版,其数据库大会上的演讲也非常精彩,他的新书十分值得期待. 2013年中国数据库技术大会第二天的"Oracle ...

  5. SQL极致优化案例:利用索引特性进行max/min优化

    不要错过更多干货文章,点击上方蓝字关注我们 IS NOT NULL的优化 1. 问题提出 客户系统有这样一条SQL,脱敏后如下: SELECT NVL(MAX(T1.CREATED),SYSDATE) ...

  6. mysql 递归 性能_MySQL优化总结+自定义函数之递归

    我最近看MySQL优化总结几个可能容易理解错误的技巧: 通常来说把可为 NULL 的列改为 NOT NULL 不会对性能提升有多少帮助,只是如果计划在列上创建索引,就应该将该列设置为 NOT NULL ...

  7. mysql数据库sql优化看这里之索引优化

    前面我们讲了如何创建索引以及哪些情况下该创建索引.现在我们来说一下sql优化中的索引如何优化. 首先我们需要了解都有哪些纬度可以进行数据库调优: ①索引失效,没有充分利用到索引--索引建立 ②关联查询 ...

  8. SQL 优化之该走索引却不走索引的分析

    分析案例: 1.走rule很快,但是收集了执行计划后却很慢 SQL> create table test(id int); 表已创建. SQL> insert into test sele ...

  9. 文件服务器索引失效,SQL优化 MySQL版 – 避免索引失效原则(一)

    避免索引失效原则(一) 精力有限,剩余的失效原则将会在 <避免索引失效原则(二)>中连载出来,请谅解 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 避免索引失效的一些原 ...

  10. SQL Server--用户自定义函数

    除了使用系统提供的函数外,用户还可以根据需要自定义函数.用户自定义函数是 SQL Server 2000 新增的数据库对象,是 SQL Server 的一大改进.与编程语言中的函数类似,Microso ...

最新文章

  1. GCD的其他(不常用)方法
  2. 【Django】安装及配置
  3. python免安装版_web.py入门01——python安装
  4. html div p 区别,html中div br p三者有什么区别?
  5. java泛型学习二:解惑通配符
  6. 币安布局去中心化交易所,原来是因为这三个原因!
  7. 小程序2-基本架构讲解(一)WXSS样式
  8. 联想Z6 Pro测评:斗战圣佛?很能打!
  9. docker ubuntu镜像_macOS 下使用 Docker 搭建 ubuntu 环境
  10. JavaScript学习(七十)—函数中this的指向问题
  11. sql从某行开始获取数据
  12. php代码审计_代码审计|PHP反序列化初识
  13. 预付费电能表远传抄表系统
  14. SDEWAN CNF for OpenNESS
  15. C#,数据库,会员积分管理系统
  16. MAC和WINDOWS链接小米路由器移动硬盘方法
  17. Gym 100818F Irrational Roots
  18. COFs单体—醛类单体/氨基单体/硼酸系列
  19. 笔记本运行php的快捷键是啥,雷神笔记本u盘启动快捷键是什么|雷神笔记本按哪个键进u盘启动...
  20. 一种工控蜜罐识别与反识别技术研究与应用实践

热门文章

  1. Kodak Preps 8 for Mac中文破解版永久激活教程
  2. 为什么你的种子磁力下载很慢?
  3. linux安装monaco字体
  4. 6、python基础:文件输入输出详解
  5. 家谱宗族网站源码_云码宗谱网络家谱软件
  6. 系统封装 如何修改别人的PE为己所用
  7. cad 2020安装失败,怎么完全彻底卸载删除清理干净cad 2020各种残留注册表和文件? 【转载】
  8. 2021SC@SDUSC Zxing开源代码(十六)PDF417二维码(二)
  9. 酷派无线升级服务器设置在哪里,酷派手机CDA自助升级线刷工具安装教程
  10. 杰魔(Geomagic Design)逆向工程软件学习1-点云和多边形面片文件的处理