欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

【書評:Oracle查詢優(yōu)化改寫】第四章

【書評:Oracle查詢優(yōu)化改寫】第四章

成都創(chuàng)新互聯(lián)主要從事做網站、網站設計、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務德城,十載網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108

BLOG文檔結構圖

【書評:Oracle查詢優(yōu)化改寫】第四章

一.1 導讀

各位技術愛好者,看完本文后,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~:

① check的特殊用法

② sql優(yōu)化中使用merge語句代替update語句(重點)

本文如有錯誤或不完善的地方請大家多多指正,ITPUB留言或QQ皆可,您的批評指正是我寫作的最大動力。

一.2 實驗環(huán)境介紹

目標庫:11.2.0.3  RHEL6.5

一.3 前言

前3章的鏈接參考相關連接:

【書評:Oracle查詢優(yōu)化改寫】第一章 http://blog.itpub.net/26736162/viewspace-1652985/

【書評:Oracle查詢優(yōu)化改寫】第二章 http://blog.itpub.net/26736162/viewspace-1654252/

【書評:Oracle查詢優(yōu)化改寫】第三章 http://blog.itpub.net/26736162/viewspace-1660422/

今天來寫寫這本書的第四章的內容,第四章主要講了UPDATE語句的正確用法,以及什么時候UPDATE語句應改寫為MERGE, 第四章的內容目錄如下:

第 4 章 插入、更新與刪除

4.1 插入新記錄

4.2 阻止對某幾列插入

4.3 復制表的定義及數(shù)據(jù)

4.4 用 WITH CHECK OPTION 限制數(shù)據(jù)錄入

4.5 多表插入語句

4.6 用其他表中的值更新

4.7 合并記錄

4.8 刪除違反參照完整性的記錄

4.9 刪除名稱重復的記錄

一.4 check的特殊用法

我們知道sysdate不能用于check約束,但是有這種需求的時候怎么辦呢?如下例子利用視圖加with check option即可解決。

09:39:08 SQL> create table ttt(create_date  date  check(create_date > sysdate));

create table ttt(create_date  date  check(create_date > sysdate))

                                                        *

ERROR at line 1:

ORA-02436: date or system variable wrongly specified in CHECK constraint

09:41:56 SQL> insert into (select empno,ename,hiredate from scott.emp where hiredate <= sysdate with check option)

09:42:13   2  values ( 9999,'test',sysdate+1);

insert into (select empno,ename,hiredate from scott.emp where hiredate <= sysdate with check option)

                                                    *

ERROR at line 1:

ORA-01402: view WITH CHECK OPTION where-clause violation

Elapsed: 00:00:00.12

09:42:14 SQL> insert into (select empno,ename,hiredate from scott.emp where hiredate <= sysdate with check option)

09:42:56   2  values ( 9999,'test',sysdate-1);

1 row created.

Elapsed: 00:00:00.03

09:42:57 SQL>

一.5 merge語句

關于update的一個容易出錯的地方就是不寫where子句,這樣的話會更新掉全表的數(shù)據(jù),一個技巧就是把set中的值復制到where子句中即可。

另外,建議大家在做多表關聯(lián)更新的時候修改為merge語句,因為merge into語句只訪問了一次表:

[oracle@rhel6_lhr ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on 星期二 5月 19 10:26:55 2015

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

連接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, Automatic Storage Management, OLAP, Data Mining

and Real Application Testing options

10:26:55 SQL> set autot on;

10:28:05 SQL> alter table lhr.emp_bk add dname varchar2(50) default 'noname';

表已更改。

已用時間:  00: 00: 01.23

10:30:04 SQL> update lhr.emp_bk a

10:30:09   2     set a.dname =(select b.dname from lhr.dept_bk b where b.deptno=a.deptno and b.dname in ('ACCOUNTING','RESERCH'))

10:30:09   3  WHERE EXISTS (select 1 from lhr.dept_bk b where b.deptno=a.deptno and b.dname in ('ACCOUNTING','RESERCH' ))

10:30:09   4  ;

已更新3行。

已用時間:  00: 00: 00.05

執(zhí)行計劃

----------------------------------------------------------

Plan hash value: 3525057516

-------------------------------------------------------------------------------

| Id  | Operation           | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

-------------------------------------------------------------------------------

|   0 | UPDATE STATEMENT    |         |     4 |   544 |    28  (18)| 00:00:01 |

|   1 |  UPDATE             | EMP_BK  |       |       |            |          |

|*  2 |   HASH JOIN SEMI    |         |     4 |   544 |     8  (13)| 00:00:01 |

|   3 |    TABLE ACCESS FULL| EMP_BK  |    14 |  1596 |     3   (0)| 00:00:01 |

|*  4 |    TABLE ACCESS FULL| DEPT_BK |     1 |    22 |     4   (0)| 00:00:01 |

|*  5 |   TABLE ACCESS FULL | DEPT_BK |     1 |    22 |     4   (0)| 00:00:01 |

-------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   2 - access("B"."DEPTNO"="A"."DEPTNO")

   4 - filter("B"."DNAME"='ACCOUNTING' OR "B"."DNAME"='RESERCH')

   5 - filter("B"."DEPTNO"=:B1 AND ("B"."DNAME"='ACCOUNTING' OR

              "B"."DNAME"='RESERCH'))

Note

-----

   - dynamic sampling used for this statement (level=2)

統(tǒng)計信息

----------------------------------------------------------

         69  recursive calls

         13  db block gets

        121  consistent gets

          9  physical reads

       3012  redo size

        837  bytes sent via SQL*Net to client

        997  bytes received via SQL*Net from client

          3  SQL*Net roundtrips to/from client

         12  sorts (memory)

          0  sorts (disk)

          3  rows processed

已用時間:  00: 00: 00.00

10:33:13 SQL> merge into lhr.emp_bk a

10:33:32   2  using (select b.dname,deptno from lhr.dept_bk b where b.dname in ('ACCOUNTING','RESERCH')) bb

10:33:32   3  on (bb.deptno=a.deptno)

10:33:32   4  when matched then

10:33:32   5  update set a.dname =bb.dname

10:33:32   6  ;

3 行已合并。

已用時間:  00: 00: 00.03

執(zhí)行計劃

----------------------------------------------------------

Plan hash value: 1386289611

--------------------------------------------------------------------------------

| Id  | Operation            | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------------

|   0 | MERGE STATEMENT      |         |     4 |   492 |     8  (13)| 00:00:01 |

|   1 |  MERGE               | EMP_BK  |       |       |            |          |

|   2 |   VIEW               |         |       |       |            |          |

|*  3 |    HASH JOIN         |         |     4 |   592 |     8  (13)| 00:00:01 |

|*  4 |     TABLE ACCESS FULL| DEPT_BK |     1 |    22 |     4   (0)| 00:00:01 |

|   5 |     TABLE ACCESS FULL| EMP_BK  |    14 |  1764 |     3   (0)| 00:00:01 |

--------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   3 - access("DEPTNO"="A"."DEPTNO")

   4 - filter("B"."DNAME"='ACCOUNTING' OR "B"."DNAME"='RESERCH')

Note

-----

   - dynamic sampling used for this statement (level=2)

統(tǒng)計信息

----------------------------------------------------------

         20  recursive calls

          7  db block gets

         38  consistent gets

          1  physical reads

       1872  redo size

        838  bytes sent via SQL*Net to client

        942  bytes received via SQL*Net from client

          3  SQL*Net roundtrips to/from client

          3  sorts (memory)

          0  sorts (disk)

          3  rows processed

10:33:32 SQL> 

另外幾篇關于使用merge語句來優(yōu)化的案例:

update修改為merge(max+decode) :http://blog.itpub.net/26736162/viewspace-1244055/

采用merge語句的非關聯(lián)形式再次顯神能 :http://blog.itpub.net/26736162/viewspace-1222423/

采用MERGE 語句的非關聯(lián)形式提升性能 :http://blog.itpub.net/26736162/viewspace-1218671/

采用MERGE語句的非關聯(lián)形式提升性能 ---后傳 :http://blog.itpub.net/26736162/viewspace-1222417/

走了索引為啥還像蝸牛一樣: http://blog.itpub.net/26736162/viewspace-1208814/

一.6 總結

到此SQL查詢優(yōu)化改寫第四章基本over,重點是對merge語句的領悟和掌握,尤其是哥列出的幾個案例,希望對做SQL優(yōu)化的童鞋有所幫助。

一.7 about me

...........................................................................................................................................................................................

本文作者:小麥苗,只專注于數(shù)據(jù)庫的技術,更注重技術的運用

ITPUB BLOG:http://blog.itpub.net/26736162

本文地址:http://blog.itpub.net/26736162/viewspace-1661906/

本文pdf版:http://yunpan.cn/QCwUAI9bn7g7w 提取碼:af2d

QQ:642808185 若加QQ請注明你所正在讀的文章標題

創(chuàng)作時間地點:2015-05-19 09:00~ 2015-05-19 11:20 于×××交易中心

<版權所有,文章允許轉載,但須以鏈接方式注明源地址,否則追究法律責任!>

...........................................................................................................................................................................................

文章標題:【書評:Oracle查詢優(yōu)化改寫】第四章
URL標題:http://aaarwkj.com/article20/gdegco.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、搜索引擎優(yōu)化、營銷型網站建設、移動網站建設網站收錄、定制網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
日本国产福利视频在线观看| 久久伊人这里都是精品| 国产精品久久久久久久久| 国产乱码精品一区二区三区爽爽爽| 国产亚洲精品一区在线| 日韩在线视频这里只有精品| 蜜臀av人妻一区二区三区| 亚洲国产欧美在线人成人| 国产欧美成人精品第一区| 日韩精品毛片在线看| 日韩专区亚洲专区欧美专区 | 亚洲av产在线精品亚洲第| 亚洲国产精品青青草| 国产夫妻自拍一级黄片| 欧美黄色成人免费网站| 未满十八周岁禁看视频| 国产视频不卡一区二区| 国产日韩亚洲欧美色片| 欧美一级午夜欧美午夜视频| 欧美一级黄色免费电影| 熟妇高潮一区二区三区| 亚洲一区在线观看激情| 国产成人亚洲欧美激情| 久久综合亚洲一区二区三区色| 国产亚洲一区二区自拍视频| 成人黄色av网站在线观看| 日韩视频播放一区二区| av成熟一区二区三区| 男人的天堂免费看看av| 亚洲少妇精品视频在线 | 91成人国产综合久久精品| 黄色录像免费看中文字幕| 亚洲品质自拍在线观看| 中文字幕欧美精品日韩人妻| 亚洲精品熟女av影院| 福利午夜福利在线观看| 国产在线高清精品二区| 色偷偷91综合久久噜噜| 成人一区二区三区观看| 久久久久久成人亚洲| 92国产精品午夜福利|