首页 > 数据库 >[20231207]开发不应该这样写sql4.txt

[20231207]开发不应该这样写sql4.txt

时间:2023-12-13 09:00:52浏览次数:30  
标签:INDEX 00 01 sql4 1025K GY 20231207 txt MZ

[20231207]开发不应该这样写sql4.txt

--//最近在优化sql语句,发现另外一种风格,实际上以前也遇到过,感觉这就像一种病,会传染只要一个这样写后面的要么跟进要么
--//不改。我觉得开发应该感谢exadata,不然我们的生产系统估计会垮掉。

1.环境:
XXXXXX> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.问题语句:
XXXXXX> @ sql_id  ag76s7zum6z3b

--SQL_ID = ag76s7zum6z3b

SELECT MZ.BRID AS PATIENT_ID,
       TO_CHAR(GH.SBXH) AS OUTPATIENT_ID,
       :"SYS_B_0" AS INHOSPITAL_ID, JZLS.JZXH AS VISIT_ID, MZ.MZHM AS CARD_NO,
       GH.GHSJ AS VISIT_TIME, MZ.BRXM AS PATIENT_NAME, MZ.BRXB AS PATIENT_SEX,
       MZ.CSNY AS PATIENT_BIRTHDATE, MZ.SFZH AS IDENTITY_CARD_ID,
       :"SYS_B_1" AS PATIENT_TYPE,
       (SELECT GY_DMZD.DMMC FROM XXXXXX_YYY.GY_DMZD WHERE GY_DMZD.DMLB    = :"SYS_B_2" AND GY_DMZD.DMSB = MZ.MZDM) AS PATIENT_NATION,
       (SELECT GY_SSXWH.NAME FROM XXXXXX_YYY.GY_SSXWH WHERE GY_SSXWH.SBXH = MZ.XZZ_SQS) AS FAMILY_ADDRESS_PROVINCE,
       (SELECT GY_SSXWH.NAME FROM XXXXXX_YYY.GY_SSXWH WHERE GY_SSXWH.SBXH = MZ.XZZ_S) AS FAMILY_ADDRESS_CITY,
       MZ.LXDZ AS FAMILY_ADDRESS_DETAIL, MZ.LXDH AS MOBILE_PHONE,
       GY.KSDM AS DEPART_CODE, GY.KSMC AS DEPART_NAME,
       KS.KSDM AS SUB_DEPART_CODE, KS.KSMC AS SUB_DEPART_NAME,
       (SELECT CSZ FROM GY_XTCS WHERE CSMC                                = :"SYS_B_3") AS HOS_ID
  FROM XXXXXX_YYY.MS_BRDA MZ
  LEFT JOIN XXXXXX_YYY.MS_GHMX GH
    ON MZ.BRID = GH.BRID
  LEFT JOIN XXXXXX_YYY.MS_GHKS KS
    ON GH.KSDM = KS.KSDM
  LEFT JOIN XXXXXX_YYY.GY_KSDM GY
    ON KS.MZKS = GY.KSDM
  LEFT JOIN XXXXXX_YYY.YS_MZ_JZLS JZLS
    ON JZLS.GHXH = GH.SBXH
 WHERE ((:card_no  = :"SYS_B_4" OR :card_no IS NULL) OR MZ.MZHM  = :card_no)
   AND ((:patient_id  = :"SYS_B_5" OR :patient_id IS NULL) OR MZ.BRID = :patient_id)
   AND ((:patientName = :"SYS_B_6" OR :patientName IS NULL) OR MZ.BRXM = :patientName)
   AND ((:patientSex  = :"SYS_B_7" OR :patientSex IS NULL) OR MZ.BRXB = :patientSex)
   AND ((:deptName  = :"SYS_B_8" OR :deptName IS NULL) OR GY.KSMC = :deptName);
--//我做了格式化处理,原始程序代码就一行。
--//可以看出开发的本意,就是带入任意参数都可以查询。可惜oracle 优化器没有这么智能,无法选择合理的执行路径。
--//根据输入选择合适的索引,导致选择全部扫描。

[email protected]:1621/dbcn/dbcn1> @ seg2 %.MS_BRDA
    SEG_MB OWNER                SEGMENT_NAME                   SEGMENT_TYPE         SEG_TABLESPACE_NAME                BLOCKS     HDRFIL     HDRBLK
---------- -------------------- ------------------------------ -------------------- ------------------------------ ---------- ---------- ----------
      1656 XXXXXX_YYY           MS_BRDA                        TABLE                XXXXXX_YYY                         211968         52     852001
--//1.6G.

--//执行计划如下:
Plan hash value: 1015797529
----------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                        | Name              | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |  OMem |  1Mem | Used-Mem |
----------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                 |                   |        |       | 60543 (100)|          |       |       |          |
|   1 |  TABLE ACCESS BY INDEX ROWID     | GY_DMZD           |      1 |    20 |     2   (0)| 00:00:01 |       |       |          |
|*  2 |   INDEX UNIQUE SCAN              | PK_GY_DMZD        |      1 |       |     1   (0)| 00:00:01 |  1025K|  1025K|          |
|   3 |  TABLE ACCESS BY INDEX ROWID     | GY_SSXWH          |      1 |    13 |     2   (0)| 00:00:01 |       |       |          |
|*  4 |   INDEX UNIQUE SCAN              | PK_GY_SSXWH       |      1 |       |     1   (0)| 00:00:01 |  1025K|  1025K|          |
|   5 |  TABLE ACCESS BY INDEX ROWID     | GY_SSXWH          |      1 |    13 |     2   (0)| 00:00:01 |       |       |          |
|*  6 |   INDEX UNIQUE SCAN              | PK_GY_SSXWH       |      1 |       |     1   (0)| 00:00:01 |  1025K|  1025K|          |
|   7 |  TABLE ACCESS BY INDEX ROWID     | GY_XTCS           |      1 |    18 |     2   (0)| 00:00:01 |       |       |          |
|*  8 |   INDEX UNIQUE SCAN              | PK_GY_XTCS        |      1 |       |     1   (0)| 00:00:01 |  1025K|  1025K|          |
|   9 |  NESTED LOOPS OUTER              |                   |    805 |   123K| 60543   (1)| 00:12:07 |       |       |          |
|* 10 |   FILTER                         |                   |        |       |            |          |       |       |          |
|* 11 |    HASH JOIN RIGHT OUTER         |                   |    687 | 99615 | 58034   (1)| 00:11:37 |  2782K|  2782K| 1588K (0)|
|  12 |     TABLE ACCESS STORAGE FULL    | GY_KSDM           |   1099 | 24178 |     7   (0)| 00:00:01 |  1025K|  1025K|          |
|* 13 |     HASH JOIN RIGHT OUTER        |                   |    687 | 84501 | 58027   (1)| 00:11:37 |  2596K|  2596K| 1573K (0)|
|  14 |      TABLE ACCESS STORAGE FULL   | MS_GHKS           |    429 | 11583 |     5   (0)| 00:00:01 |  1025K|  1025K|          |
|  15 |      NESTED LOOPS OUTER          |                   |    687 | 65952 | 58022   (1)| 00:11:37 |       |       |          |
|* 16 |       TABLE ACCESS STORAGE FULL  | MS_BRDA           |     92 |  6532 | 57498   (1)| 00:11:30 |  1025K|  1025K|          |
|  17 |       TABLE ACCESS BY INDEX ROWID| MS_GHMX           |      8 |   200 |    10   (0)| 00:00:01 |       |       |          |
|* 18 |        INDEX RANGE SCAN          | IDX_MS_GHMX_BRID  |      8 |       |     2   (0)| 00:00:01 |  1025K|  1025K|          |
|  19 |   TABLE ACCESS BY INDEX ROWID    | YS_MZ_JZLS        |      1 |    12 |     4   (0)| 00:00:01 |       |       |          |
|* 20 |    INDEX RANGE SCAN              | I_YS_MZ_JZLS_GHXH |      1 |       |     2   (0)| 00:00:01 |  1025K|  1025K|          |
----------------------------------------------------------------------------------------------------------------------------------

[email protected]:1621/dbcn/dbcn1> @ bind_cap ag76s7zum6z3b :card_no
SQL_ID        CHILD_NUMBER WAS NAME      POSITION MAX_LENGTH LAST_CAPTURED       DATATYPE_STRING VALUE_STRING
------------- ------------ --- --------- -------- ---------- ------------------- --------------- ------------
ag76s7zum6z3b            0 YES :CARD_NO         5         32 2023-12-06 09:54:09 VARCHAR2(32)    90377195
                         1 YES :CARD_NO         5         32 2023-12-05 11:29:35 VARCHAR2(32)    02666713
                         2 YES :CARD_NO         5         32 2023-12-06 19:33:57 VARCHAR2(32)    91544379

[email protected]:1621/dbcn/dbcn1> @ bind_cap_awr ag76s7zum6z3b ''
no rows selected

--//这样语句在awr历史表还没有记录。可以发现在共享池抓到的sql语句都是带入card_no参数的。
--//我多次提过不要这样写sql语句,这不是在学校写家庭作业,这是生产系统!!这类语句在生产系统还有一大堆,真不知道现在的毕业生
--//如何毕业的。

标签:INDEX,00,01,sql4,1025K,GY,20231207,txt,MZ
From: https://www.cnblogs.com/lfree/p/17898261.html

相关文章

  • ETL-txt数据转换为Excel数据
    前言:  将txt文件中的数据抽取出来,然后装载到Excel中。 具体操作步骤:  数据准备id,name,age,gender,province,city,region,phone,birthday,hobby,register_date392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-69442......
  • 【misc】txt零宽度隐写
    零字符宽度隐写1.1前置知识1.1.1统一码(Unicode)统一码(Unicode),也叫万国码或单一码,是计算机科学领域中的一项业界标准,包括字符集、编码方案等。Unicode是一种重要的交互和显示的通用字符编码标准,它覆盖了美国、欧洲、中东、非洲、印度、亚洲和太平洋的语言,以及古文和专业符号。Uni......
  • robots.txt禁止收录协议写法
    1. 什么是robots.txt?robots.txt 是网站和搜索引擎的协议的纯文本文件。当一个搜索引擎蜘蛛来访问站点时,它首先爬行来检查该站点根目录下是否存在robots.txt,如果存在,根据文件内容来确定访问范围,如果没有,蜘蛛就沿着链接抓取。robots.txt 放在项目的根目录下。2. robots.txt......
  • requirements.txt
    参考Python中的requirement.txtPython中的依赖Python需要维护项目相关的依赖包。通常我们会在项目的根目录下放置一个requirements.txt文件,用于记录所有依赖包和它的确切版本号。requirements.txt的内容长这样:alembic==1.0.10appnope==0.1.0astroid==2.2.5attrs==1......
  • pip 导入导出模块 requirement.txt
    前言全局说明pip导出模块名功能,是为了在其他环境安装方便而产生的。不管是新环境部署,还给他人代码运行,这个都非常实用。一、导出pipfreeze>requirement.txt二、导入模块pipinstall-rrequirements.txt三、导入模块,指定国内安装源doubanpipinstall-rrequirem......
  • [20231204]快速删除大量文件测试(rsync版本)4.txt
    [20231204]快速删除大量文件测试(rsync版本)4.txt--//前个星期做了大量文件测试,发现只要顺着inode节点顺序删除文件效率最高.--//还有一种方式使用rsync,利用建立空目录使用同步功能,删除对应目录里面的全部文件.--//我记忆里以前测试效率不错,今天做具体探究.1.建立测试环境:$mo......
  • 20231207
    今天上课完成的测试 个人观点非正确答案 软件需求与分析课堂测试之九-面向对象设计与分析      阅读下列图和文字材料 ,回答问题1至问题3。某物品拍卖网站为参与者提供物品拍卖平台,组织拍卖过程,提供在线或线下交易服务。网站的主要功能描述如下:(1)拍卖参与者分......
  • 每日总结20231207
    代码时间(包括上课)5h代码量(行):100行博客数量(篇):1篇相关事项:1、今天是周四,这周的课到此结束,上课的随堂测试也是回答的十分顺利,全部正确,并且在最后的一节课上查了软件设计师的成绩,让人十分高兴,我顺利的通过了,而且每科均达到五十分以上。2、今天下午的时候把我们班的发展团员的相关......
  • 每日总结_20231207
    UML(UnifiedModelingLanguage)是一种用于软件系统建模的标准化语言,它提供了一组图形符号和规范,以便开发人员可以更好地理解、设计和构建复杂的软件系统。UML包括多种图表,每种图表都有不同的目的和应用场景。1.用例图(UseCaseDiagrams)特点:用例(UseCase)是描述系统功能的一......
  • datax采集txt文件数据到hive
    1、提前创建hive表结构DROPTABLEIFEXISTSods.ods_log_1diu;CREATETABLEIFNOTEXISTSods.ods_log_1diu(SI_NOSTRING,--varchar(10)notnull,主键SEND_TABLESTRING,--varchar(30)notnull,主键SEQSTRING,--varchar(11)notnull,主......