<optgroup id="r9hwm"></optgroup><nav id="r9hwm"><label id="r9hwm"></label></nav>

    <tt id="r9hwm"><tr id="r9hwm"></tr></tt>
  1. 
    
  2. <optgroup id="r9hwm"><samp id="r9hwm"><dl id="r9hwm"></dl></samp></optgroup>

  3. <optgroup id="r9hwm"><samp id="r9hwm"><dl id="r9hwm"></dl></samp></optgroup>

        1. <listing id="r9hwm"></listing>
          <delect id="r9hwm"></delect>
          <optgroup id="r9hwm"><samp id="r9hwm"><ol id="r9hwm"></ol></samp></optgroup>

          優化sql語句

          優化sql語句

          sql語句的優化

          由于SQL優化起來比較復雜,并且還會受環境限制,在開發過程中,寫SQL必須必須要遵循以下幾點的原則: *采用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在WHERE子句的末尾. 例如: (低效) SELECT … FROM EMP E WHERE SAL > 50000 AND JOB = 'MANAGER' AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=*); (高效) SELECT … FROM EMP E WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=*) AND SAL > 50000 AND JOB = 'MANAGER'; *子句中避免使用'*' 當在SELECT子句中列出所有的COLUMN時,使用動態SQL列引用 ‘*’ 是一個方便的方法.可是,這是一個非常低效的方法. 實際上,ORACLE在解析的過程中, 會將'*' 依次轉換成所有的列名, 這個工作是通過查詢數據字典完成的, 這意味著將耗費更多的時間. 3.使用表的別名(Alias) 當在SQL語句中連接多個表時, 請使用表的別名并把別名前綴于每個Column上.這樣一來,就可以減少解析的時間并減少那些由Column歧義引起的語法錯誤. 注:Column歧義指的是由于SQL中不同的表具有相同的Column名,當SQL語句中出現這個Column時,SQL解析器無法判斷這個Column的歸屬。

          怎樣優化SQL語句提高效率

          我們要做到不但會寫SQL,還要做到寫出性能優良的SQL語句。

          (1)選擇最有效率的表名順序(只在基于規則的優化器中有效): Oracle的解析器按照從右到左的順序處理FROM子句中的表名,FROM子句中寫在最后的表(基礎表 driving table)將被最先處理,在FROM子句中包含多個表的情況下,您必須選擇記錄條數最少的表作為基礎表。 假如有3個以上的表連接查詢, 那就需要選擇交叉表(intersection table)作為基礎表, 交叉表是指那個被其他表所引用的表。

          (2)WHERE子句中的連接順序: Oracle采用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他WHERE條件之前, 那些能夠過濾掉最大數量記錄的條件必須寫在WHERE子句的末尾。 (3)SELECT子句中避免使用‘*’: Oracle在解析的過程中, 會將‘*’依次轉換成任何的列名, 這個工作是通過查詢數據字典完成的, 這意味著將耗費更多的時間。

          (4)減少訪問數據庫的次數: Oracle在內部執行了許多工作: 解析SQL語句, 估算索引的利用率, 綁定變量 , 讀數據塊等。 (5)在SQL*Plus , SQL*Forms和Pro*C中重新配置ARRAYSIZE參數, 能夠增加每次數據庫訪問的檢索數據量 ,建議值為200。

          (6)使用DECODE函數來減少處理時間: 使用DECODE函數能夠避免重復掃描相同記錄或重復連接相同的表。 (7)整合簡單,無關聯的數據庫訪問: 假如您有幾個簡單的數據庫查詢語句,您能夠把他們整合到一個查詢中(即使他們之間沒有關系)。

          (8)刪除重復記錄: 最高效的刪除重復記錄方法 ( 因為使用了ROWID)例子: DELETE FROM EMP E WHERE E。 ROWID > (SELECT MIN(X。

          ROWID) FROM EMP X WHERE X。EMP_NO = E。

          EMP_NO); (9)用TRUNCATE替代DELETE: 當刪除表中的記錄時,在通常情況下, 回滾段(rollback segments ) 用來存放能夠被恢復的信息。 假如您沒有COMMIT事務,ORACLE會將數據恢復到刪除之前的狀態(準確地說是恢復到執行刪除命令之前的狀況) 而當運用TRUNCATE時, 回滾段不再存放任何可被恢復的信息。

          當命令運行后,數據不能被恢復。因此很少的資源被調用,執行時間也會很短。

          (TRUNCATE只在刪除全表適用,TRUNCATE是DDL不是DML)。 以上是我對于這個問題的解答,希望能夠幫到大家。

          怎樣優化SQL語句的執行

          環境:oracle 817 + linux + 陣列柜 swd_billdetail 表5000萬條數據 SUPER_USER 表2800條數據 連接列上都有索引,而且super_user中的一條對應于swd_billdetail表中的很多條記錄表與索引都做了分析。

          實際應用的查詢為: select a。CHANNEL, B。

          user_class from swd_billdetail B, SUPER_USER A where A。cn = B。

          cn; 這樣在分析時導致查詢出的數據過多,不方便,所以用count(a。 CHANNEL||B。

          user_class)來代替,而且count(a。CHANNEL||B。

          user_class)操作本身并不占用過多的時間,所以可以接受此種替代。 利用索引查詢出SWD_BILLDETAIL表中所有記錄的方法 SQL> select count(id) from SWD_BILLDETAIL; COUNT(ID) ---------- 53923574 Elapsed: 00:02:166。

          00 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=18051 Card=1) 1 0 SORT (AGGREGATE) 2 1 INDEX (FAST FULL SCAN) OF 'SYS_C001851' (UNIQUE) (Cost=18051 Card=54863946) Statistics ---------------------------------------------------------- 0 recursive calls 1952 db block gets 158776 consistent gets 158779 physical reads 1004 redo size 295 bytes sent via SQL*Net to client 421 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 1 rows processed 利用全表掃描從SWD_BILLDETAIL表中取出全部數據的方法。 SQL> select count(user_class) from swd_billdetail; COUNT(USER_CLASS) ----------------- 53923574 Elapsed: 00:11:703。

          07 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=165412 Card=1 Bytes=2) 1 0 SORT (AGGREGATE) 2 1 TABLE ACCESS (FULL) OF 'SWD_BILLDETAIL' (Cost=165412 Card=54863946 Bytes=109727892) Statistics ---------------------------------------------------------- 0 recursive calls 8823 db block gets 1431070 consistent gets 1419520 physical reads 0 redo size 303 bytes sent via SQL*Net to client 421 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 1 rows processed select count(a。 CHANNEL||B。

          user_class) from swd_billdetail B, SUPER_USER A where A。cn = B。

          cn; EXEC_ORDER PLANLINE ---------- ----------------------------------------------------------------------------------------------------------- 6 SELECT STATEMENT OPT_MODE:CHOOSE (COST=108968,CARD=1,BYTES=21) 5 SORT (AGGREGATE) (COST=,CARD=1,BYTES=21) 4 NESTED LOOPS (COST=108968,CARD=1213745,BYTES=25488645) 1 TABLE ACCESS (FULL) OF 'SWORD。 SUPER_USER' (COST=2,CARD=2794,BYTES=27940) 3 TABLE ACCESS (BY INDEX ROWID) OF 'SWORD。

          SWD_BILLDETAIL' (COST=39,CARD=54863946,BYTES=603503406) 2 INDEX (RANGE SCAN) OF 'SWORD。 IDX_DETAIL_CN' (NON-UNIQUE) (COST=3,CARD=54863946,BYTES=) 這個查詢耗費的時間很長,需要1個多小時。

          運行后的信息如下: COUNT(A。CHANNEL||B。

          USER_CLASS) ------------------------------ 1186387 Elapsed: 01:107:6429。 87 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=108968 Card=1 Bytes=21) 1 0 SORT (AGGREGATE) 2 1 NESTED LOOPS (Cost=108968 Card=1213745 Bytes=25488645) 3 2 TABLE ACCESS (FULL) OF 'SUPER_USER' (Cost=2 Card=2794Bytes=27940) 4 2 TABLE ACCESS (BY INDEX ROWID) OF 'SWD_BILLDETAIL' (Cost=39 Card=54863946 Bytes=603503406) 5 4 INDEX (RANGE SCAN) OF 'IDX_DETAIL_CN' (NON-UNIQUE) (Cost=3 Card=54863946) Statistics ---------------------------------------------------------- 0 recursive calls 4 db block gets 1196954 consistent gets 1165726 physical reads 0 redo size 316 bytes sent via SQL*Net to client 421 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed 將語句中加入hints,讓oracle的優化器使用嵌套循環,并且大表作為驅動表,生成新的執行計劃: select /*+ ORDERED USE_NL(A) */ count(a。

          CHANNEL||B。user_class) from swd_billdetail B, SUPER_USER A where A。

          cn = B。cn; EXEC_ORDER PLANLINE ---------- ----------------------------------------------------------------------------------------------------- 6 SELECT STATEMENT OPT_MODE:CHOOSE (COST=109893304,CARD=1,BYTES=21) 5 SORT (AGGREGATE) (COST=,CARD=1,BYTES=21) 4 NESTED LOOPS (COST=109893304,CARD=1213745,BYTES=25488645) 1 TABLE ACCESS (FULL) OF 'SWORD。

          SWD_BILLDETAIL' (COST=165412,CARD=54863946,BYTES=603503406) 3 TABLE ACCESS (BY INDEX ROWID) OF 'SWORD。SUPER_USER。

          轉載請注明出處華閱文章網 » 優化sql語句

          短句

          matlab循環語句

          閱讀(282)

          Matlab 中while循環語句的用法while語法:while expressionstatementsend說明:while expression, statements, end 計算一個表達式,并在該表達式為 true 時在一個循環中重復執行一組語

          短句

          吃語句

          閱讀(238)

          關于吃貨的句子10個字 空有一顆學習的心,偏偏生了一條掛科的命;空有一顆減肥的心,偏偏生了一條吃貨的命。我們都是吃貨。 閨蜜,等俺有錢了。 我要帶你吃遍所有的美食。人是鐵,飯是鋼,吃貨總比癡貨好。不要相信一個吃貨說她要減肥她說這話的時

          短句

          語句成分

          閱讀(245)

          句子成分有哪些 句子的成分可以分為主語部分和謂語部分.細分可以分為主語、謂語、表語、賓語、定語、狀語、補語、獨立成分等.主語,顧名思義,主題、主體,也就是一個句子中主要述說的主體,一般位于句首.比如,小明和小花都很熱愛學習英語,講述

          短句

          bat語句

          閱讀(371)

          bat分類語句 @rem 用goto,或者 if ,這里舉例 goto @echo offecho 請選擇武器:echo 1.刀 2.槍 3.棍 4.原子彈set /p wind=if "%wind%"=="1" goto :1if "%wind%"=="2" goto :2i

          短句

          sql語句優化

          閱讀(221)

          sql語句的優化 由于SQL優化起來比較復雜,并且還會受環境限制,在開發過程中,寫SQL必須必須要遵循以下幾點的原則: 1.ORACLE采用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過濾掉最大數

          短句

          唯美英語句子

          閱讀(282)

          唯美的英文句子~ “我以為 只有被喜歡的人喜歡 才會覺得幸福,如果你喜歡的人 不喜歡你 那么就算全世界的人都喜歡你 還是會覺得很孤獨吧?”If the person you like doesn't like you, wouldn't it still b

          短句

          batif語句

          閱讀(298)

          后綴名bat的if語句IF 語句1 語句2 語句3 如果語名1不成立,則直接執行語句3,實際上,語句3 與 if 語句沒有關系 , 但是,如果 if 或 for 語法錯誤,則直接退出,不執行下面的語句。 if 語句的寫法變化很多,但有一個共同點,就是 if的

          短句

          sql語句分頁

          閱讀(244)

          如何用sql語句 實現分頁查詢方法1:適用于 SQL Server 2000/2005SELECT TOP 頁大小 *FROM table1WHERE id NOT IN(SELECT TOP 頁大小*(頁數-1) id FROM table1 ORDER

          短句

          數據庫刪除語句

          閱讀(387)

          sql 刪除語句 1、delete 語句用于刪除表中的行。delete語句執行刪除的過程是每次從表中刪除一行,并且同時將該行的刪除操作作為事務記錄在日志中保存 語法:DELETE FROM 表名稱 WHERE 列名稱 = 值, 如:刪除student表中姓名

          短句

          vbs語句

          閱讀(242)

          vbs語句有哪些 ctionary 對象的成員概要屬性和說明CompareMode 設定或返回鍵的字符串比較模式Count 只讀。返回 Dictionary 里的鍵/條目對的數量Item(key) 設定或返回指定

          短句

          sql分頁語句

          閱讀(275)

          如何用sql語句 實現分頁查詢方法1:適用于 SQL Server 2000/2005SELECT TOP 頁大小 *FROM table1WHERE id NOT IN(SELECT TOP 頁大小*(頁數-1) id FROM table1 ORDER

          短句

          sql語句的優化

          閱讀(240)

          優化SQL有什么方法 在數據庫應用系統中編寫可執行的SQL語句可以有多種方式實現,但哪一條是最佳方案卻難以確定。為了解決這一問題,有必要對SQL實施優化。簡單地說,SQL語句的

          短句

          mysql刪除語句

          閱讀(257)

          mysql數據庫刪除數據語句怎么寫 方法/步驟查詢數據:select * from xxx;例子:(1)select id,username,password from t_user;(2)select id,username,password,gender from t_u

          短句

          分頁的sql語句

          閱讀(287)

          如何用sql語句 實現分頁查詢方法1:適用于 SQL Server 2000/2005SELECT TOP 頁大小 *FROM table1WHERE id NOT IN(SELECT TOP 頁大小*(頁數-1) id FROM table1 ORDER

          短句

          matlab循環語句

          閱讀(282)

          Matlab 中while循環語句的用法while語法:while expressionstatementsend說明:while expression, statements, end 計算一個表達式,并在該表達式為 true 時在一個循環中重復執行一組語

          短句

          吃語句

          閱讀(238)

          關于吃貨的句子10個字 空有一顆學習的心,偏偏生了一條掛科的命;空有一顆減肥的心,偏偏生了一條吃貨的命。我們都是吃貨。 閨蜜,等俺有錢了。 我要帶你吃遍所有的美食。人是鐵,飯是鋼,吃貨總比癡貨好。不要相信一個吃貨說她要減肥她說這話的時

          短句

          sql語句優化

          閱讀(221)

          sql語句的優化 由于SQL優化起來比較復雜,并且還會受環境限制,在開發過程中,寫SQL必須必須要遵循以下幾點的原則: 1.ORACLE采用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過濾掉最大數

          短句

          bat語句

          閱讀(371)

          bat分類語句 @rem 用goto,或者 if ,這里舉例 goto @echo offecho 請選擇武器:echo 1.刀 2.槍 3.棍 4.原子彈set /p wind=if "%wind%"=="1" goto :1if "%wind%"=="2" goto :2i

          短句

          語句成分

          閱讀(245)

          句子成分有哪些 句子的成分可以分為主語部分和謂語部分.細分可以分為主語、謂語、表語、賓語、定語、狀語、補語、獨立成分等.主語,顧名思義,主題、主體,也就是一個句子中主要述說的主體,一般位于句首.比如,小明和小花都很熱愛學習英語,講述

          短句

          唯美英語句子

          閱讀(282)

          唯美的英文句子~ “我以為 只有被喜歡的人喜歡 才會覺得幸福,如果你喜歡的人 不喜歡你 那么就算全世界的人都喜歡你 還是會覺得很孤獨吧?”If the person you like doesn't like you, wouldn't it still b

          短句

          sql增加語句

          閱讀(619)

          sql server新增字段語句 添加字段的SQL語句的寫法:通用式: alter table [表名] add [字段名] 字段屬性 default 缺省值 default 是可選參數增加字段: alter table [表名] add

          短句

          batif語句

          閱讀(298)

          后綴名bat的if語句IF 語句1 語句2 語句3 如果語名1不成立,則直接執行語句3,實際上,語句3 與 if 語句沒有關系 , 但是,如果 if 或 for 語法錯誤,則直接退出,不執行下面的語句。 if 語句的寫法變化很多,但有一個共同點,就是 if的

          <optgroup id="r9hwm"></optgroup><nav id="r9hwm"><label id="r9hwm"></label></nav>

            <tt id="r9hwm"><tr id="r9hwm"></tr></tt>
          1. 
            
          2. <optgroup id="r9hwm"><samp id="r9hwm"><dl id="r9hwm"></dl></samp></optgroup>

          3. <optgroup id="r9hwm"><samp id="r9hwm"><dl id="r9hwm"></dl></samp></optgroup>

                1. <listing id="r9hwm"></listing>
                  <delect id="r9hwm"></delect>
                  <optgroup id="r9hwm"><samp id="r9hwm"><ol id="r9hwm"></ol></samp></optgroup>
                  亚洲丰满少妇xxxxx高潮