您現在的位置是:電腦技術吧?>? 組裝維修 ??>??如何進行sql優化,sql查詢優化??>??正文詳情

如何進行sql優化,sql查詢優化

清星騰2019-12-03 12:22:11 人圍觀
簡介sql or 優化今天,我查看AWR,發現SQL一次執行超過40秒。語句如下:1選擇a.bill﹐類為pol﹐code,b.bill﹐name為pol﹐name,a.bill﹐n復雜sql優化

今天閑的 看awr,發現一條SQL 每次執行40多秒,語句如下? 1 SELECT a.bill_class AS pol_code , b.bill_name AS pol_name , a.bill_no AS card_no , '網站' AS buy_path , a.rev_clerk_code AS agent_code , a.rev_clerk_type AS agent_type , to_char(a.regist_date, 'yyyy-mm-dd') AS recip_date , to_char(a.chk_date, 'yyyy-mm-dd') AS pay_date , to_char(a.invalid_date, 'yyyy-mm-dd') AS invalid_date , CASE WHEN chk_stat = '0' THEN '未核銷' WHEN chk_stat = '1' AND autochkflag = '1' THEN '已自動核銷' WHEN chk_stat = '1' AND autochkflag = '0' THEN '已人工核銷' WHEN chk_stat = '2' THEN '丟失' WHEN chk_stat = '3' THEN '作廢' WHEN chk_stat = '4' THEN '回繳核銷' WHEN chk_stat = '5' THEN '已銷毀' WHEN chk_stat = 'A' THEN '待核銷' END AS recip_stat , rev_branch_no , b.bill_literal_price AS prem FROM shcvms.bill_grant_check a , shcvms.bill_class b WHERE a.regist_date IS NOT NULL AND a.bill_class = b.bill_class AND a.bill_class IN ( '1001', '1093', '1096', '1097', '1098', '1099', '1100', '1302', '1303', '1305', '1306', '1910', '1911', '1912', '1913', '1914', '1915', '1916', '1917' , '1918', '1919', '1922', '1923', '1924', '1925', '1926', '1927', '1928', '1929', '1930', '1931', '1935', '1936', '1937', '1938', '1939', '1940', '1941', '1942', '1943', '1944', '1945', '5232', '5233', '5234', '5252', '5255', '5258', '5265', '5260', '5276', '5277', '5278', '5285', '5290', '5301', '5304', '5309', '5311', '5329', '5330', '5359' , '5376', '5507', '5512', '5514', '5516', '5122', '5126', '5130', '5132', '5141', '5142', '5156', '5157', '5161', '5162', '5163', '5164', '5165', '5166', '5167', '5168', '5558', '5564', '5507' )   看這種SQL,一種方法,是通過PL/SQL DEV直接格式化下,第二種方法,放到txt文件中,搜索 FROM,直接把前面的全刪了(非標量子查詢時)。

  SELECT   FROM shcvms.bill_grant_check a , shcvms.bill_class b  WHERE a.regist_date IS NOT NULL AND  a.bill_class = b.bill_class  AND a.bill_class IN ( );  這里也沒有綁定變量,所以explain plan for的執行計劃是沒有誤差的  當前執行計劃如下? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 PLAN_TABLE_OUTPUT ----------------------------------------------------------------------------------------------------------------------------------------- Plan hash value: 2990887684 --------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 6452K| 553M| 151K (5)| 00:30:19 | |* 1 | HASH JOIN | | 6452K| 553M| 151K (5)| 00:30:19 | |* 2 | TABLE ACCESS FULL| BILL_CLASS | 206 | 5150 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| BILL_GRANT_CHECK | 7321K| 453M| 151K (5)| 00:30:19 | --------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access(A.BILL_CLASS=B.BILL_CLASS) 2 - filter(B.BILL_CLASS='1001' OR B.BILL_CLASS='1093' OR B.BILL_CLASS='1096' OR B.BILL_CLASS='1097' OR B.BILL_CLASS='1098' OR B.BILL_CLASS='1099' OR B.BILL_CLASS='1100' OR B.BILL_CLASS='1302' OR B.BILL_CLASS='1303' OR B.BILL_CLASS='1 。

  這個看起來很簡單的,7321k=7.3M 7.3M/453M =1.6% 這個結果集,完全可以走索引,而且這里使用的in,并且里面用的是常量,完全可以走 INList ITERATOR  我創建一個虛索引,看一下執行計劃,如果效果確實不錯,再提個申請,真實創建這個索引。

? 1 2 3 4 5 6 7 8 SQL create index billgrant_class on shcvms.bill_grant_check(bill_class) nosegment; Index created. SQL alter session set _use_nosegment_indexes=true; Session altered.   然后使用explain plan for 來解析執行計劃? 1 2 3 4 5 explain plan for SELECT /* index(a billgrant_class ) */ N多個列 FROM shcvms.bill_grant_check a , shcvms.bill_class b WHERE a.regist_date IS NOT NULL AND a.bill_class = b.bill_class AND a.bill_class IN (......N多常量 )   我們看看執行計劃? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 PLAN_TABLE_OUTPUT ----------------------------------------------------------------------------------------------------------------------------------------- Plan hash value: 2116188717 -------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 6452K| 553M| 207 (1)| 00:00:03 | | 1 | MERGE JOIN | | 6452K| 553M| 207 (1)| 00:00:03 | | 2 | INLIST ITERATOR | | | | | | |* 3 | TABLE ACCESS BY INDEX ROWID| BILL_GRANT_CHECK | 7321K| 453M| 203 (1)| 00:00:03 | |* 4 | INDEX RANGE SCAN | BILLGRANT_CLASS | 7321K| | 16 (0)| 00:00:01 | |* 5 | SORT JOIN | | 206 | 5150 | 4 (25)| 00:00:01 | |* 6 | TABLE ACCESS FULL | BILL_CLASS | 206 | 5150 | 3 (0)| 00:00:01 | -------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter(A.REGIST_DATE IS NOT NULL) 4 - access(A.BILL_CLASS='1001' OR A.BILL_CLASS='1093' OR A.BILL_CLASS='1096' OR A.BILL_CLASS='1097' OR A.BILL_CLASS='1098' OR A.BILL_CLASS='1099' OR A.BILL_CLASS='1100' OR A.BILL_CLASS='1302' OR   看Cost。

從之前的151k 降到了現在的207,速度提升為原來的1/1000。

在統計信息正確的情況下 cost是具有參考價值的(不正確的話就別看cost了)  現在可以提申請了。

真實創建這個索引。

  一個簡單的例子完事,(雖然這么簡單的,不想往這貼,但是我blog中Oracle優化之SQL 優化分支太空了,寫點東西充實一下它)

版權聲明:本文由 清星騰 整理編輯。

原標題:sql優化有哪些,sql的優化

轉載注明出處:http://www.dn9ww09s.icu/assemble/15043.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • 數據優化,大數據可以優化嗎

    數據優化,大數據可以優化嗎 相關圖片優化數據庫方法如何分析和優化數據庫中的表?現在您知道了基本操作,但有時已建立的數據庫使用起來非常慢。這是因為數據庫在建立時沒有經過優化。現在我們來談談數據庫優化分...

  • 服務器拔盤重插后紅燈,服務器無法使用U盤

    服務器拔盤重插后紅燈,服務器無法使用U盤 相關圖片數據庫服務器為了實現在遠程數據庫中插入當前數據庫表select表數據的數據同步,配置了Oracle服務。遠程和本地服務是Oracle 1。是否將數據插入當前數據庫?12創建服務器數據遷移...

  • 如何跟蹤高招錄取狀態,被別人跟蹤了怎么辦

    如何跟蹤高招錄取狀態,被別人跟蹤了怎么辦 相關圖片跟蹤人的心理狀態你可以用10046事件來追蹤?1234567891012131415161718192012223242526282929301312334[[email protected]跟蹤表...

  • 偽靜態規則,htaccess偽靜態規則

    偽靜態規則,htaccess偽靜態規則 相關圖片emlog偽靜態規則在is7.5下,常用程序使用web.config來實現以web.config命名的新文件的偽靜態創建。文件的內容是?XML版本=1.0編碼=UTF-8?配置系統thinkphp偽靜態規則...

  • 第N,第一N

    第N,第一N 相關圖片第N空間由于需要測試數據庫的連接性,測試項目使用方便的access作為后臺數據庫,但由于過于方便,半天都埋沒在其隱藏的關鍵字中。。。該項目使用NHibernate作為數NⅠ我第八集...

  • 如何看計算機IP,查看計算機ip

    如何看計算機IP,查看計算機ip 相關圖片通過ip地址查計算機名修改計算機名或IP后,Oracle10g無法啟動服務。問題的原因不明。癥狀是windows服務中的一個Oracle服務無法啟動,并報告以下錯誤。Windows無計算機...

  • 累計完成怎么計算,累計計算

    累計完成怎么計算,累計計算 相關圖片累計人數怎么計算財務人員手工記賬時,會有借貸后的余額,即累計余額,即每個科目后記錄余額。如果使用計算機記賬,可以查詢完成累計余額的計算。一、首先創建一個表(假設表...

  • 日志怎么刪除,怎么刪除日志全部刪除

    日志怎么刪除,怎么刪除日志全部刪除 相關圖片怎么刪除qq日志SQL中的每個查詢都會生成一個日志,但是如果長時間不清理它,整個硬件可能都已滿。在這種情況下,我不能直接進入背景。現在讓我們學習如何清理這個日志。SQL2005q...

  • mysql復制表結構,mysql 復制

    mysql復制表結構,mysql 復制 相關圖片mysql查看表結構何時使用復制表?例如:我現在對一個表進行操作,但是我害怕錯誤地刪除數據,所以我在同一個數據庫中建立一個表結構和表數據相同的表進行備份。如果mysqldump更麻...

  • 起始編號怎么設置,如何設置頁碼自動編號

    起始編號怎么設置,如何設置頁碼自動編號 相關圖片設置頁碼方法1:刪除自動編號字段并創建相同的自動編號字段。方法2:總是增加自動編號(每次增加1個)。如果您添加另一條記錄,則它的編號將在前一條記錄的基礎上增加1(刪除的...

熱評文章

  • mysql去除重復,mysql去掉重復記錄

    mysql去除重復,mysql去掉重復記錄 相關圖片mysql消除重復行如果在使用命令行進入mysql時沒有設置警報音,那是非常可怕的。你可以使用這個命令來消除可怕的聲音。代碼如下:MySQL-H localhost-U root-mysql索引有重復怎么處理的...

  • 什么是特點,特點

    什么是特點,特點 相關圖片規律的特點只解決一個問題,什么是訪問?要設計數據庫管理系統,請使用access在access中設計一個表,查詢,然后使用VB作為窗口進行連接。在access中設計一個窗口消息的特點...

  • oracle導出數據庫dmp,dmp導入oracle數據庫

    oracle導出數據庫dmp,dmp導入oracle數據庫 相關圖片oracle導出數據庫通過導入和導出DMP文件,可以同時導入和導出一個或多個數據庫表的表結構和表數據。我們來談談如何進出口。首先輸入命令行,單擊開始,輸入CMD:Enter,將顯示命orac...

  • 轉點編號,轉轉的訂單編號有什么用

    轉點編號,轉轉的訂單編號有什么用 相關圖片轉轉訂單編號查詢進度一。打開SQL Server企業管理器企業管理器,右鍵單擊要導出的SQL數據庫:所有任務-導出數據2。將出現導出向導窗口。選擇要導出的數據源,即您剛剛選擇的數據轉...

  • 字段取值,如果字段的取值只有兩種可能

    字段取值,如果字段的取值只有兩種可能 相關圖片字段取值非空且大于0TINYINT-128 127 TINYINT無符號0 255 SMALLINT-32768 32767 SMALLINT無符號0 65535 MEDIUMINmysql設置字段取值范圍...

  • 宏怎么使用,宏的使用一般是通過

    宏怎么使用,宏的使用一般是通過 相關圖片啟用宏不能在宏條件列中使用SQL表達式。一般來說,直接運行宏只是一個測試。在確保宏設計正確后,可以將宏附加到窗體、報表或控件以響應事件,或創建自定義菜單命令以運行宏。...

  • access 怎么用,access有什么用

    access 怎么用,access有什么用 相關圖片access應用實例如何使用訪問頁面答案:訪問頁面的功能是提供一個web訪問模式。您可以通過頁面操作數據。它的使用也相對簡單。您可以通過向導輕松地添加和刪除數據office access怎么用...

  • 網頁訪問,訪問限制有什么用

    網頁訪問,訪問限制有什么用 相關圖片怎么打開訪問限制SQL server使用URL HTTP訪問SQL server可以使用HTTP訪問Microsoft SQL server 2000。在使用HTTP指定查詢之便捷訪問...

  • access數據庫文件的擴展名是,access是一個什么數據庫

    access數據庫文件的擴展名是,access是一個什么數據庫 相關圖片access關系數據庫通常,access數據庫文件的卷不太小。實際上,我們可以輕松地減少access數據庫文件的體積。方法如下。單擊Microsoft Office按鈕,單擊“訪問”access數據庫文件下載...

  • 顯示行號,取消星號顯示

    顯示行號,取消星號顯示 相關圖片vi怎樣顯示行號一。工具選項2。文本編輯器所有語言的通用檢查行號vs顯示代碼行號...

關注微信

变脸官网查询