最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL使用復(fù)合索引實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢的優(yōu)化

 更新時(shí)間:2022年05月25日 09:55:03   作者:??千云????  
這篇文章主要介紹了SQL使用復(fù)合索引實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢的優(yōu)化,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

一 問題

程序再在一次查詢時(shí)出現(xiàn)查詢時(shí)間過長(zhǎng),每次查詢要1-2分鐘業(yè)務(wù)反饋用戶操作體驗(yàn)很差,sql如下:

select *
FROM edi_booking edibooking0_
WHERE 1 = 1
        AND edibooking0_.load_port_code IN ('CNCWN', 'CNDCB', 'AA', 'CNMWN'
        , 'CWHSD', 'CNSHK', 'CNYTN', 'CNSKU')
        AND edibooking0_.carrier_code = 'WHL'
        AND upper(edibooking0_.so_no) LIKE upper('025%')
        AND edibooking0_.load_port_code = 'CNSHK'
        AND edibooking0_.status <= 1
        AND edibooking0_.tfc_code = 'E19957'
ORDER BY edibooking0_.so_no ASC;

需要對(duì)查詢進(jìn)行優(yōu)化。

二 分析

還是老樣子,先看看執(zhí)行計(jì)劃,看看走沒走索引,不查不知道一查嚇一跳,執(zhí)行計(jì)劃上居然顯示走了索引,索引是函數(shù)索引upper(so_no) ,走了索引為什么還慢呢,根據(jù)以往的經(jīng)驗(yàn),走了索引不是應(yīng)該很快才對(duì)嗎?奇奇怪怪,于是注意到了查詢條件中還有一個(gè)條件tfc_code,又發(fā)現(xiàn)這個(gè)字段其實(shí)也有建立索引,是不是數(shù)據(jù)庫(kù)的執(zhí)行計(jì)劃有問題,沒有走tfc_code索引呢?或者說tfc_code索引本身有問題,于是進(jìn)行重建tfc_code索引。

alter index EDI_BOOKING_IDX_TFC_CODE rebuild online;

執(zhí)行后,哇塞,查詢速度果然上來了,2s鐘返回查詢結(jié)果。查看執(zhí)行計(jì)劃,走了tfc_code索引,nice! 但是故事還沒有結(jié)束! 過了一天后,業(yè)務(wù)又反饋查詢慢了,查看執(zhí)行計(jì)劃,走的索引又變成了upper(so_no)。讓人頭禿。

那還個(gè)方向思考,既然走了索引,為什么還會(huì)慢?。?! 原來走了索引并不一定就會(huì)快,這是一個(gè)大大的誤區(qū)。

upper(edibooking0_.so_no) LIKE upper('025%')這個(gè)過濾條件走了索引,但是索引的類型是range_scan,這種類型查詢返回的數(shù)據(jù)量會(huì)比較大,這就是這次走索引還慢的問題所在,因?yàn)樽吡怂饕蠓祷亓?code>150w條數(shù)據(jù),而150w條數(shù)據(jù)被后去的條件過濾,這樣導(dǎo)致了查詢速度慢的問題。

而引發(fā)這個(gè)問題,一個(gè)是upper(so_no)索引返回?cái)?shù)據(jù)量大,另外一個(gè)就是oracle的執(zhí)行計(jì)劃沒有選擇最優(yōu)的索引,如果選擇tfc_code索引,那么查詢也會(huì)很快。

三 解決方案

指定數(shù)據(jù)庫(kù)選擇索引:

由于執(zhí)行計(jì)劃是數(shù)據(jù)庫(kù)自動(dòng)生成的,我們無法改變執(zhí)行計(jì)劃,但是我們可以通過指定索引的方式,讓數(shù)據(jù)庫(kù)去執(zhí)行我們指定的索引,如:

select /*+index(edibooking0_ IDX_EDI_BOOKING_SO_TFC_CT)*/*
FROM edi_booking edibooking0_  

但是這種有一個(gè)弊端,要對(duì)每一個(gè)執(zhí)行的語(yǔ)句都要進(jìn)行指定索引,修改量比較大。

建立復(fù)合索引:

CREATE INDEX IDX_EDI_BOOKING_SO_TFC_CT
ON edi_booking (UPPER("SO_NO"), "TFC_CODE","CONTRACT_NO");

復(fù)合索引很容易給人一種雞肋的感覺,因?yàn)樗麑?duì)應(yīng)的查詢條件一定是他最左邊的索引字段被查詢才能生效,但是其實(shí)他是非常有用的,比如我們現(xiàn)在的場(chǎng)景,進(jìn)行復(fù)核索引過濾時(shí)就會(huì)產(chǎn)生非常大的性能提升,最終通過建立組合索引解決問題

到此這篇關(guān)于SQL使用復(fù)合索引實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢的優(yōu)化的文章就介紹到這了,更多相關(guān)SQL查詢優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 登錄mysql數(shù)據(jù)庫(kù)的幾種方式

    登錄mysql數(shù)據(jù)庫(kù)的幾種方式

    本文主要介紹了登錄mysql數(shù)據(jù)庫(kù)的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • mysql如何將一個(gè)字段賦值給另一個(gè)字段

    mysql如何將一個(gè)字段賦值給另一個(gè)字段

    這篇文章主要介紹了mysql如何將一個(gè)字段賦值給另一個(gè)字段,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • mysql5.7.21啟動(dòng)異常的修復(fù)方法

    mysql5.7.21啟動(dòng)異常的修復(fù)方法

    這篇文章主要為大家詳細(xì)介紹了mysql5.7.21啟動(dòng)異常的修復(fù)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 詳解數(shù)據(jù)庫(kù)語(yǔ)言中的null值

    詳解數(shù)據(jù)庫(kù)語(yǔ)言中的null值

    這篇文章主要詳解了數(shù)據(jù)庫(kù)語(yǔ)言中的null值,針對(duì)MySQL上的實(shí)例進(jìn)行講解,需要的朋友可以參考下
    2015-04-04
  • mysql 數(shù)據(jù)類型轉(zhuǎn)換的實(shí)現(xiàn)

    mysql 數(shù)據(jù)類型轉(zhuǎn)換的實(shí)現(xiàn)

    這篇文章主要介紹了mysql 數(shù)據(jù)類型轉(zhuǎn)換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Ubuntu下啟動(dòng)、停止、重啟MySQL,查看錯(cuò)誤日志命令大全

    Ubuntu下啟動(dòng)、停止、重啟MySQL,查看錯(cuò)誤日志命令大全

    這篇文章主要介紹了Ubuntu下啟動(dòng)、停止、重啟MySQL,查看錯(cuò)誤日志命令大全,需要的朋友可以參考下
    2014-06-06
  • Centos7下mysql 8.0.15 安裝配置圖文教程

    Centos7下mysql 8.0.15 安裝配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了Centos7下mysql 8.0.15 安裝配置圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • MySQL啟動(dòng)時(shí)InnoDB引擎被禁用了的解決方法

    MySQL啟動(dòng)時(shí)InnoDB引擎被禁用了的解決方法

    最近在工作中遇到一個(gè)問題,現(xiàn)將解決的方法分享出來供大家參考學(xué)習(xí),下面這篇文章主要給大家介紹了關(guān)于MySQL啟動(dòng)時(shí)InnoDB引擎被禁用了的解決方法,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • MySQL學(xué)習(xí)之日期函數(shù)的用法詳解

    MySQL學(xué)習(xí)之日期函數(shù)的用法詳解

    本文將學(xué)習(xí)MySQL的日期函數(shù),在前面章節(jié)的練習(xí)中,我們就利用過NOW()函數(shù)來獲取過當(dāng)前系統(tǒng)時(shí)間,用DATEDIFF函數(shù)來計(jì)算日期相差的天數(shù),接下來我們就系統(tǒng)的學(xué)習(xí)一下 日期函數(shù)
    2022-08-08
  • MySQL中表子查詢與關(guān)聯(lián)子查詢的基礎(chǔ)學(xué)習(xí)教程

    MySQL中表子查詢與關(guān)聯(lián)子查詢的基礎(chǔ)學(xué)習(xí)教程

    這篇文章主要介紹了MySQL中表子查詢與關(guān)聯(lián)子查詢的基礎(chǔ)學(xué)習(xí)教程,同時(shí)文中也提到了關(guān)于關(guān)聯(lián)子查詢的查詢效率問題,需要的朋友可以參考下
    2015-12-12

最新評(píng)論

沭阳县| 大新县| 水富县| 尉犁县| 公主岭市| 韶山市| 两当县| 定边县| 宁晋县| 宣威市| 册亨县| 苍山县| 华坪县| 洮南市| 美姑县| 呼伦贝尔市| 昔阳县| 沙洋县| 宜兰市| 淄博市| 碌曲县| 康保县| 尚义县| 灵台县| 天峨县| 盐池县| 修文县| 平顶山市| 孝昌县| 宜春市| 西华县| 惠安县| 广东省| 普兰店市| 河津市| 乌鲁木齐县| 阿尔山市| 新竹市| 赤水市| 赤城县| 瑞金市|