[20231207]開發不應該這樣寫sql4.txt

来源:https://www.cnblogs.com/lfree/archive/2023/12/13/17898261.html
-Advertisement-
Play Games

原文地址:https://www.soughttech.com/front/article/7159/viewArticle 今天我偶然看到了參數slave_exec_mode。從手冊中的描述可以看出,該參數與MySQL複製有關。它是一個可以動態修改的變數。預設為STRICT mode(嚴格模式), ...


[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語句,這不是在學校寫家庭作業,這是生產系統!!這類語句在生產系統還有一大堆,真不知道現在的畢業生
--//如何畢業的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 下麵針對 ASP.NET Core 中修改預設埠的五種常用方法的詳細示例,分別對應 appsettings.json 配置 Kestrel 的 Endpoint、使用 UseUrls 方法、命令行參數方法、host.json 配置方法和使用 Docker 的方式。 方法一:appsettings. ...
  • VS2022之後,其實還挺好用的,但個人還是習慣VS+Resharper的強強組合,尤其是Ctrl+N快捷鍵的全局搜,比VS自帶的Ctrl+T好用太多了,Ctrl+B還能直接查看反編譯之後的dll的方法。下麵是常用VS快捷鍵,收藏記錄下。 1、項目快捷鍵CTRL + SHIFT + B生成解決方案C ...
  • 哈嘍大家好,我是鹹魚 參加過校招面試的小伙伴們肯定對下麵這道面試題很熟悉:“當你在瀏覽器輸入一段網址後會發生什麼?”。這道面試題可以說是很經典了,因為其涉及大量網路協議,可以非常直觀的看出小伙伴們對電腦網路體系的整體把握程度 但如果問題換成:“當你打開終端並輸入 ls 時會發生什麼?”,有多少小伙 ...
  • 車機環境下的音頻使用場景,相較於原始 Android 的音頻使用場景,存在這些特殊性: + **使用專門的 aDSP 晶元進行音效處理;** + **需要播放/控制原始 Android 預設之外的音源(AudioUsage);** + **音源間交互行為更加複雜(AudioFocus);** + ... ...
  • 本文分享自華為雲社區《根據執行計劃優化SQL【綻放吧!GaussDB(DWS)雲原生數倉】》,作者:西嶺雪山。 引言 如果您剛接觸DWS那一定會好奇想要知道"REMOTE_FQS_QUERY" 到底代表什麼意思?我們看官網的描述是代表這執行計劃已經CN直接將原語句下發到DN,各DN單獨執行,並將執行 ...
  • 作為開發人員,碰到了執行時間較長的sql時,基本上大家都會說”加個索引吧”。但是索引是什麼東西,索引有哪些特性,下麵和大家簡單討論一下。 ...
  • API 的調用穩定性被視為數據服務的最重要的指標。該指標的影響因素是多種多樣的,「袋鼠雲數據服務平臺 DataAPI」不僅多次對於調用性能和穩定性進行壓測和調優,而且還提供了多種配置項優化手段供客戶進行自行調優。但是當遇到不可預期的大流量或其他突然情況時還是會遇到 API 調用失敗的情況。 當隨著流 ...
  • 1.背景概述 目前需要搭建一個從庫,由於單表數據量較大,時間比較有限,考慮到導入導出的時間,並且GreatSQL支持並行load data的功能,能夠加速數據的導入,因此決定使用 select into outfile 和 load data 的方式進行數據的遷移; 在數據導入完成後進行數據同步,從 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...