oracle存儲過程執(zhí)行慢 oracle數(shù)據(jù)庫存儲過程執(zhí)行慢時如何優(yōu)化?
oracle數(shù)據(jù)庫存儲過程執(zhí)行慢時如何優(yōu)化?解決方案:您需要根據(jù)查詢條件為您的表設計相應的索引。有時可以根據(jù)需要為一個表構建多個索引。然后再執(zhí)行一次,你會發(fā)現(xiàn)它過去需要30秒,但現(xiàn)在可以在幾分鐘內(nèi)完成
oracle數(shù)據(jù)庫存儲過程執(zhí)行慢時如何優(yōu)化?
解決方案:您需要根據(jù)查詢條件為您的表設計相應的索引。有時可以根據(jù)需要為一個表構建多個索引。然后再執(zhí)行一次,你會發(fā)現(xiàn)它過去需要30秒,但現(xiàn)在可以在幾分鐘內(nèi)完成,這與使用光標無關。游標的使用完全取決于應用程序的需要。我相信你不會選擇使用光標,如果你不能使用它們。一般來說,只有在沒有辦法的時候才選擇游標。查詢速度慢的原因是,如果在存儲過程中執(zhí)行查詢,如果沒有索引,它將逐個搜索并掃描80多萬條數(shù)據(jù)。在完成搜索之前,您不會看到結果。但是你在外面執(zhí)行得很快的原因是PLSQL會先檢查幾條數(shù)據(jù),然后先返回給你,所以你會馬上看到結果,但事實上,查詢沒有結束并不容易。如果你在有很多數(shù)據(jù)的時候把它拉下來,你就會很慢地發(fā)信。事實上,調(diào)查過程還沒有結束??傊?,編寫存儲過程的第一步是編寫存儲過程,第二步是優(yōu)化存儲過程。否則,當你有大量數(shù)據(jù)時,如果你的程序?qū)懙貌缓?,問題就會立即暴露出來
test data test statement update user set age=3 where name=“weikaixxxxx”添加存儲過程。在MySQL控制臺上,delete$$create procedure add_utest(在age1 int中,在name1 char(12))begin update user set age=age1 where name=name1 end$$timer procedure:后跟方法名(in表示傳入的值,中間是參數(shù)名,最后是數(shù)據(jù)類型)。開始:執(zhí)行開始結束$$:結束開始和結束。中間是要執(zhí)行的SQL語句。注意,我在參數(shù)名后面加了1。如果它與字段名同名,則速度會非常慢。Drop procedure addTest view存儲過程show procedure status where DB=“Test”DB=:數(shù)據(jù)庫名稱Test存儲過程調(diào)用addTest(1,“weikaixxxxx”)20次,取最大執(zhí)行時間。每次運行它時,都必須修改年齡。否則,如果不實現(xiàn)更新,就無法實現(xiàn)目標。添加存儲過程之前的執(zhí)行時間是1.024秒。添加存儲過程后,執(zhí)行時間為1.082。存儲過程的執(zhí)行速度基本相同,但不需要編譯步驟,節(jié)省了計算資源。也許測試語句不夠復雜,但是實際的業(yè)務邏輯有多復雜呢?所以我不做非常復雜的存儲過程測試,沒有實際效果。如果你知道什么場景很適合老板使用,請不要猶豫給我提建議!互聯(lián)網(wǎng)上的許多人說,不建議使用存儲過程,因為它們很難維護。---------------------原文:https://blog.csdn.net/weikaixxxxxx/article/details/86526421