色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Oracle長耗時(shí)SQL優(yōu)化案例

冬至子 ? 來源:琢磨先生DataBase ? 作者:琢磨先生DataBase ? 2023-05-19 15:02 ? 次閱讀

最近在生產(chǎn)客服平臺(tái),運(yùn)營崗老師反饋,一個(gè)2w人的企業(yè),在信息詳情查詢時(shí),加載時(shí)間過長,越70s左右出結(jié)果,需要后臺(tái)優(yōu)化下SQL。

首先展示一下原SQL

select DISTINCT pma.member_apply_id,
                tm.mobile_num,
                tpp.product,
                tpp.plan_id,
                tpp.plan_name,
                pma.org_name,
                vtor.role_id,
                tp.person_id,
                tp.real_name,
                tp.certi_code,
                tp.birthday,
                pma.start_work_date,
                pma.rank,
                pma.retire_age,
                pma.month_base,
                ext.self_define_11,
                ext.now_month_salary,
                pma.employee_date,
                pma.eff_date,
                pma.employee_no,
                pma.member_sts_id,
                pma.account_state_id,
                tp.certi_type,
                tp.gender,
                decode(tp.gender, 'M', '男' , 'F', '女') sexName,
                mt.member_sts_name memberStateName,
                amt.account_sate_desc accountStateName,
                ct.certi_type_name certiTypeName,
                pma.email
  FROM tms_plan_member_apply pma,
       tms_person tp,
       tms_mobile_number_screen tm,
       v_tms_org_role vtor,
       tms_product_plan tpp,
       tms_certi_type_tbl ct,
       tms_member_sts_tbl mt,
       tms_member_account_sate amt,
       tms_plan_member_collect_ext ext,
       (select max(pma2.member_apply_id) member_apply_id
          FROM tms_plan_member_apply pma2, tms_busi_apply tba2
         WHERE tba2.flow_sts_id = 9999
           AND EXISTS (SELECT 1
                  FROM v_tms_org_role T
                 WHERE t.role_type = '13'
                   AND t.ORG_NAME = pma2.org_name
                 START WITH T.ROLE_ID = '46000'
                CONNECT BY PRIOR T.ORG_ID = T.PARENT_ORG)
           AND tba2.apply_id = pma2.busi_apply_id
           AND tba2.plan_id = '39076'
         GROUP BY pma2.person_id) t1
 WHERE ((tm.screen_id =
       (select max(mm.screen_id)
            FROM tms_mobile_number_screen mm
           WHERE mm.person_id = tm.person_Id)) OR tm.screen_id is null)
   AND ext.apply_id(+) = pma.busi_apply_id
   AND ext.person_id(+) = pma.person_id
   AND ct.certi_type_id(+) = tp.certi_type
   AND pma.person_id = tp.person_id
   AND tm.person_id(+) = pma.person_id
   AND mt.member_sts_id(+) = pma.member_sts_id
   AND amt.account_sate_id(+) = pma.account_state_id
   AND vtor.org_name = pma.org_name
   AND vtor.ROLE_TYPE = 13
   AND t1.member_apply_id = pma.member_apply_id
   AND tpp.plan_id = '39076'
 ORDER BY tp.real_name

遇到這種SQL,我們第一步是要將無用的查詢和碼表去掉,來簡化這種較長的SQL,如上面所展示,去除tms_mobile_number_screen 、tms_certi_type_tbl、tms_member_sts_tbl、tms_member_account_sate表關(guān)聯(lián)。

之后發(fā)現(xiàn),當(dāng)去掉tms_plan_member_collect_ext這個(gè)表的關(guān)聯(lián)條件后,查詢的速度就特別快,SQL中,使用該表的關(guān)聯(lián)條件為:

ext.apply_id(+) = pma.busi_apply_id

AND ext.person_id(+) = pma.person_id

oracle中的(+)是一種特殊的用法,(+)表示外連接,并且總是放在非主表的一方。例如左外連接:

select A.a,B.a from A LEFT JOIN B ON A.b=B.b;

等價(jià)于

select A.a,B.a from A,B where A.b = B.b (+);

再舉個(gè)例子,這次是右外連接:

select A.a,B.a from A RIGHT JOIN B ON A.b=B.b;

等價(jià)于

select A.a,B.a from A,B where A.b (+) = B.b;

觀察了一下ext表的結(jié)構(gòu),發(fā)現(xiàn)使用了聯(lián)合索引,聯(lián)合索引就是apply_id和person_id兩個(gè)字段,這時(shí)候第一反應(yīng)是索引是否生效,看了一下執(zhí)行計(jì)劃,確實(shí)走了索引,這里普及一下索引是否生效的例子:

索引:IDX(b,c)

select id where b = xx;

select id where c = xx;

上面的兩句sql會(huì)走b,c的聯(lián)合索引嗎?

答案是第一條會(huì)走,第二條不會(huì)。

那多個(gè)字段的聯(lián)合索引,使用部分字段會(huì)走索引嗎?例如 IDX(a,b,c) select id where b = xx and c = xx;

答案是不會(huì),其實(shí)不管是多少個(gè)字段的聯(lián)合索引,不管查詢順序,不管查詢用到了幾個(gè)字段,只要沒有使用聯(lián)合索引的第一個(gè)字段,則不會(huì)走聯(lián)合索引。

在數(shù)據(jù)量很大的表中,聯(lián)合索引要比單個(gè)索引要慢,因?yàn)橐葘纱?,接著看表索引,發(fā)現(xiàn)該表有一個(gè)主鍵是索引,果斷采用主鍵索引,因?yàn)槲ㄒ恍愿?,使用主鍵索引后,速度立刻由70s下降到0.5s左右。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    762

    瀏覽量

    44117
  • Oracle
    +關(guān)注

    關(guān)注

    2

    文章

    289

    瀏覽量

    35123
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    連接oracle數(shù)據(jù)庫,封裝sql執(zhí)行子vi

    連接oracle數(shù)據(jù)庫,封裝sql執(zhí)行子vi。連接oracle數(shù)據(jù)庫可以安裝oracle客戶端,或者通過odbc的方式去連接。連接后,可通過封裝的子vi,執(zhí)行
    發(fā)表于 07-03 12:07

    Oracle的經(jīng)典sql總結(jié)

    Oracle常用經(jīng)典sql
    發(fā)表于 10-15 06:46

    Oracle抽數(shù)到程序使用的SQL Server數(shù)據(jù)表

    利用Kettle將數(shù)據(jù)從Oracle抽數(shù)到SQL Server
    發(fā)表于 11-06 09:26

    C語言中使用嵌入式SQL訪問Oracle數(shù)據(jù)庫的方法

    使用C語言開發(fā)Oracle應(yīng)用程序通常有兩種方法。一是利用嵌入式SQL語言,將SQL作為子語言嵌入到C語言中,借助C語言訪問Oracle以及實(shí)現(xiàn)過程化控制和復(fù)雜計(jì)算。二是利用
    發(fā)表于 12-15 06:35

    提高Oracle的數(shù)據(jù)庫性能

    問題。通過優(yōu)化SQL語句效率、擴(kuò)充高級(jí)緩沖區(qū)和配置重做日志緩沖區(qū)等幾個(gè)方面介紹了Oracle數(shù)據(jù)庫優(yōu)化方法,探討了OraCle如何提高性能
    發(fā)表于 11-11 18:16 ?4次下載

    Oracle編程基礎(chǔ)

    本章介紹Oracle編程基礎(chǔ),主要有PL/SQL相關(guān)內(nèi)容和Oracle的控制語句。PL/SQL(Procedural Language/SQL
    發(fā)表于 03-26 16:15 ?14次下載

    ORACLE-體系結(jié)構(gòu)-SQL語言簡介

    ORACLE-體系結(jié)構(gòu)-SQL語言簡介(南京理士奧電源技術(shù)有限公司)-ORACLE-體系結(jié)構(gòu)-SQL語言簡介,有需要的可以參考!
    發(fā)表于 08-31 12:15 ?8次下載
    <b class='flag-5'>ORACLE</b>-體系結(jié)構(gòu)-<b class='flag-5'>SQL</b>語言簡介

    Oracle-sql語句收集整理大全

    Oracle-sql語句收集整理大全(開關(guān)電源技術(shù)綜述課題)-文檔為Oracle-sql語句收集整理大全總結(jié)文檔,是一份不錯(cuò)的參考資料,感興趣的可以下載看看,,,,,,,,,,,,,
    發(fā)表于 09-17 12:39 ?8次下載
    <b class='flag-5'>Oracle-sql</b>語句收集整理大全

    ORACLE數(shù)據(jù)庫教程-SQL使用講解

    ORACLE數(shù)據(jù)庫教程-SQL使用講解(普德新星電源技術(shù)有限公司最新招聘信息)-該文檔為ORACLE數(shù)據(jù)庫教程-SQL使用講解文檔,是一份還算不錯(cuò)的參考文檔,感興趣的可以下載看看,,,
    發(fā)表于 09-28 10:27 ?4次下載
    <b class='flag-5'>ORACLE</b>數(shù)據(jù)庫教程-<b class='flag-5'>SQL</b>使用講解

    Oracle.10g.Pl.SQL編程入門及開發(fā)

    Oracle.10g.Pl.SQL編程入門及開發(fā)教程免費(fèi)下載。
    發(fā)表于 03-28 17:06 ?0次下載

    oracle用的是sql語句嗎

    是的,Oracle使用的是SQL語言。SQL(Structured Query Language)是一種用于管理和操作關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)編程語言,被廣泛應(yīng)用于企業(yè)級(jí)數(shù)據(jù)庫系統(tǒng)中,包括Oracl
    的頭像 發(fā)表于 12-06 10:30 ?1068次閱讀

    oracle sql基本命令大全

    Oracle SQL(Structured Query Language)是一種用于管理和操作關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)化語言。它具有強(qiáng)大的查詢和操作數(shù)據(jù)庫的能力,通過簡單的指令可實(shí)現(xiàn)復(fù)雜的操作。下面
    的頭像 發(fā)表于 12-06 10:40 ?1239次閱讀

    oracle sql 定義變量并賦值

    Oracle SQL中,變量是用來存儲(chǔ)數(shù)據(jù)值的標(biāo)識(shí)符。通過定義和使用變量,我們可以在SQL語句中使用它們來存儲(chǔ)和處理數(shù)據(jù),從而實(shí)現(xiàn)更靈活和動(dòng)態(tài)的查詢和操作。 在Oracle
    的頭像 發(fā)表于 12-06 10:46 ?2789次閱讀

    oracle執(zhí)行sql查詢語句的步驟是什么

    Oracle數(shù)據(jù)庫是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有強(qiáng)大的SQL查詢功能。Oracle執(zhí)行SQL查詢語句的步驟包括編寫SQL語句、解析
    的頭像 發(fā)表于 12-06 10:49 ?958次閱讀

    Oracle如何執(zhí)行sql腳本文件

    Oracle是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),可用于存儲(chǔ)、查詢和管理大量的數(shù)據(jù)。在Oracle中,可以通過執(zhí)行SQL腳本文件來一次性地執(zhí)行多個(gè)SQL語句或者批量處理數(shù)據(jù)。在下面的文章中,我將
    的頭像 發(fā)表于 12-06 10:51 ?6661次閱讀
    主站蜘蛛池模板: 好男人在线高清WWW免费观看| 99影视久久电影网久久看影院 | 国产精品久久毛片A片软件爽爽 | 亚洲 欧美 国产 视频二区| 国产强奷糟蹋漂亮邻居在线观看| 亚洲精品tv久久久久久久久久| 精品无码一区二区三区不卡| 最新精品国产| 全彩黄漫火影忍者纲手无遮挡| 国产白丝JK被疯狂输出视频| 亚洲电影网址| 就去色电影| 变形金刚7免费观看完整| 玩弄放荡人妻一区二区三区| 火影小南被爆羞羞网站| 24小时日本在线| 日韩免费一区| 好大好爽CAO死我了BL| 2022久久精品国产色蜜蜜麻豆| 人人干人人插| 国产一区二区内射最近更新| 中国少妇内射XXXHD免费| 人人爽天天碰狠狠添| 国产欧美日韩中文视频在线| 中文免费视频| 日本又黄又裸一级大黄裸片| 国精产品一区一区三区有| 24小时日本在线观看片免费| 日本免费一本天堂在线| 国内九一激情白浆发布| 97蜜桃网123.com| 天美麻豆成人AV精品| 久久精品国产亚洲AV未满十八 | 快播电影频道| 电影日本妻子| 一起碰一起噜一起草视频| 欧美午夜精品A片一区二区HD| 国产毛多水多高潮高清| 最近2018年手机中文字幕| 色悠久久久久综合欧美99| 精品伊人久久久|