小編給大家分享一下Oracle如何通過注釋改變執行計劃,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創新互聯專注于文成網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供文成營銷型網站建設,文成網站制作、文成網頁設計、文成網站官網定制、重慶小程序開發服務,打造文成網絡公司原創品牌,更為您提供文成網站排名全網營銷落地服務。Oracle 通過注釋改變執行計劃
一:問題現象
T_XXX表同步延時1小時,其它表同步速度正常;
主要慢在同步時的一個delete T_XXX語句上,單條執行耗時12秒;
二:問題原因
T_XXX表存在唯一性索引,理論上速度很快;
查看T_XXX表存在delete行級觸發器,查看觸發器邏輯,發現觸發器內一個update語句特別慢;
UPDATE CHENJCH.T_CHENJCH_RISK ..where RISK_ID ....
查看執行計劃,update語句走全表掃描,速度很慢,通過hint強制走主鍵索引,速度特別快;
為什么執行計劃不走主鍵?
查看T_CHENJCH_RISK表統計信息顯示表有0行數據,但是實際上有200萬行數據;
由于數據同步時T_CHENJCH_RISK表存在大量的delete/update/insert操作,上次收集統計信息時正好這個表里沒有數據,但是經過幾天的數據同步后,表里的數據量發生了很大變化,統計信息也不是實時進行收集,最終導致生成較差的執行計劃;
解決方案:
嘗試刪除T_CHENJCH_RISK表統計信息,讓數據庫通過動態取樣實時的收據信息,但是執行計劃沒有變,還是走全表掃描,速度沒有提高;
begin
dbms_stats.delete_table_stats(ownname => 'CHENJCH', tabname => 'T_CHENJCH_RISK');
end;
嘗試重新收集T_CHENJCH_RISK表統計信息,讓數據庫通過動態取樣實時的收據信息,但是執行計劃沒有變,還是走全表掃描,速度沒有提高;
begin
DBMS_STATS.GATHER_TABLE_STATS('CHENJCH',
'T_CHENJCH_RISK',
estimate_percent => 100,
method_opt => 'FOR ALL INDEXED COLUMNS',
degree => 6,
CASCADE => TRUE);
end;
為什么執行計劃沒有變?
(數據庫版本Oracle 12.2.0.1.0)
因為SQL語句存在綁定變量,SQL文本沒有變,導致執行計劃也沒有發生變化;
通過對表T_CHENJCH_RISK添加和刪除注釋,可以讓數據庫重新生成執行計劃;
comment on column CHENJCH.T_CHENJCH_RISK.RISK_ID is 'PK_T_CHENJCH_RISK';
comment on column CHENJCH.T_CHENJCH_RISK.RISK_ID is '';
查看新生成的執行計劃,T_CHENJCH_RISK已經開始走主鍵索引了,速度有明顯提升;
以上是“Oracle如何通過注釋改變執行計劃”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯-成都網站建設公司行業資訊頻道!
新聞名稱:Oracle如何通過注釋改變執行計劃-創新互聯
轉載注明:http://vcdvsql.cn/article36/dsohsg.html
成都網站建設公司_創新互聯,為您提供外貿建站、響應式網站、網站內鏈、定制開發、營銷型網站建設、虛擬主機
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯