欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > update 子查詢使用介紹

update 子查詢使用介紹

熱門標簽:城市地圖標志怎么標注 硅基電話機器人官網 電話機器人怎么看余額 長沙外呼系統平臺 美國地圖標注軟件下載 漯河電銷回撥外呼系統 合肥crm外呼系統加盟 西安電話自動外呼系統 怎么修改高德地圖標注

基礎知識
1, 關聯子查詢和非關聯子查詢

在非關聯子查詢中,內部查詢只執行一次并返回它的值給外部查詢,然后外部查詢在它的處理中使用內部查詢返回給它的值。而在關聯子查詢中,對于外部查詢返回的每一行數據,內部查詢都要執行一次。另外,在關聯子查詢中是信息流是雙向的。外部查詢的每行數據傳遞一個值給子查詢,然后子查詢為每一行數據執行一次并返回它的記錄。然后,外部查詢根據返回的記錄做出決策。

如:

SELECT o1.CustomerID, o1.OrderID, o1.OrderDate
FROM Orders o1
WHERE o1.OrderDate = (SELECT Max(OrderDate)
FROM Orders o2
WHERE o2.CustomerID = o1.CustomerID)

是一個關聯子查詢

SELECT o1.CustomerID, o1.OrderID, o1.OrderDate
FROM Orders o1
WHERE o1.OrderDate IN
(SELECT TOP 2 o2.OrderDate
FROM Orders o2
WHERE o2.CustomerID = o1.CustomerID)
ORDER BY CustomerID

是一個非關聯子查詢

2, 提示(HINT)

一般在優化時,無論采用基于規則的或是基于代價的方法,由Oracle系統的優化器來決定語句的執行路徑。這樣的選擇的路徑不要見得是最好的。所以,Oracle提供了一種方法叫提示的方法。它可以讓編程人員按照自己的要求來選擇執行路徑,即提示優化器該按照什么樣的執行規則來執行當前的語句。這樣可以在性能上比起Oracle優化自主決定要好些。

通常情況下,編程人員可以利用提示來進行優化決策。通過運用提示可以對下面內容進行指定:


l SQL語句的優化方法;

l 對于某條SQL語句,基于開銷優化程序的目標;

l SQL語句訪問的訪問路徑;
l 連接語句的連接次序;
l 連接語句中的連接操作。

如果希望優化器按照編程人員的要求執行,則要在語句中給出提示。提示的有效范圍有限制,即有提示的語句塊才能按照提示要求執行。下面語句可以指定提示:

l 簡單的SELECT ,UPDATE ,DELETE 語句;
l 復合的主語句或子查詢語句;
l 組成查詢(UNION)的一部分。

提示的指定有原來的注釋語句在加“+”構成。語法如下:

[ SELECT | DELETE|UPDATE ] /*+ [hint | text ] */

[ SELECT | DELETE|UPDATE ] --+ [hint | text ]

注意在“/*”后不要空就直接加“+”,同樣 “--+”也是連著寫。

警告:如果該提示語句書寫不正確,則Oracle就忽略掉該語句。

常見的提示有:

Ordered 強制按照from子句中指定的表的順序進行連接
Use_NL 強制指定兩個表間的連接方式為嵌套循環(Nested Loops)
Use_Hash 強制指定兩個表間的連接方式為哈希連接(Hash Join)
Use_Merge 強制指定兩個表間的連接方式為合并排序連接(Merge Join)
Push_Subq 讓非關聯子查詢提前執行
Index 強制使用某個索引

3, 執行計劃

在PL/SQL Developer的SQL WINDOWS中用鼠標或鍵盤選中SQL語句,然后按F5,就會出現執行計劃解析的界面:

4, Update的特點

Update的系統內部執行情況可以參照附文:對update事務的內部分析.doc

使用Update的基本要點就是,

1) 盡量使用更新表上的索引,減少不必要的更新
2) 更新的數據來源花費時間盡可能短,如果無法做到就把更新內容插入到中間表中,然后給中間表建上索引,再來更新
3) 如果更新的是主鍵,建議刪除再插入。
5, 示例用表

后面的闡述將圍繞以下兩張表展開:

Create table tab1 (workdate varchar2(8), cino varchar2(15), val1 number, val2 number);
Create table tab2 (workdate varchar2(8), cino varchar2(15), val1 number, val2 number);
Create table tab3 (workdate varchar2(8), cino varchar2(15), val1 number, val2 number);
Create table tab4 (workdate varchar2(8), cino varchar2(15), val1 number, val2 number);

workdate, cino為兩張表的關鍵字,默認情況沒有建主鍵索引。

二,Update兩種情況

用Update更新某個表,無外乎是兩種情況:根據關聯子查詢,更新字段;通過非關聯子查詢,限定更新范圍。如果還有第三種情況,那就是前兩種情況的疊加。

1, 根據關聯子查詢,更新字段

Update tab1 t
Set (val1, val2) = (select val1, val2
from tab2
where workdate = t.workdate
and cino = t.cino);

通過tab2來更新tab1的相應字段。執行SQL語句時,系統會從tab1中一行一行讀記錄,然后再通過關聯子查詢,找到相應的字段來更新。關聯子查詢能否通過tab1的條件快速的查找到對應記錄,是優化能否實現的必要條件。所以一般都要求在tab2上建有Unique或者排重性較高的Normal索引。執行所用時間大概為(查詢tab1中一條記錄所用的時間 + 在tab2中查詢一條記錄所用的時間)* tab1中的記錄條數。

如果子查詢條件比較復雜,如以下語句:

Update tab1 t
Set (val1, val2) = (select val1, val2
from tab2 tt
where exists (select 1
from tab3
where workdate = tt.workdate
and cino = tt.cino)
and workdate = t.workdate
and cino = t.cino);

這時更新tab1中的每條記錄花費在子查詢上的時間將成倍增加,如果tab1中的記錄數較多,這種更新語句幾乎是不可完成。

解決方式是,把子查詢提取出來,做到中間表中,然后給中間表建上索引,用中間表來代替子查詢,這樣速度就能大大提高:

Insert into tab4
select workdate, cino, val1, val2
from tab2 tt
where exists (select 1
from tab3
where workdate = tt.workdate
and cino = tt.cino);
create index tab4_ind01 on tab4(workdate, cino);

Update tab1 t
Set (val1, val2) = (select val1, val2
from tab4 tt
where workdate = t.workdate
and cino = t.cino);

2, 通過非關聯子查詢,限定更新范圍

Update tab1 t
set val1 = 1
where (workdate, cino) in (select workdate, cino from tab2)

根據tab2提供的數據范圍,來更新tab1中的相應記錄的val1字段。

在這種情況下,系統默認執行方式往往是先執行select workdate, cino from tab2子查詢,在系統中形成系統視圖,然后在tab1中選取一條記錄,查詢系統視圖中是否存在相應的workdate, cino組合,如果存在,則更新tab1,如果不存在,則選取下一條記錄。這種方式的查詢時間大致等于:子查詢查詢時間 + (在tab1中選取一條記錄的時間 + 在系統視圖中全表掃描尋找一條記錄時間)* tab1的記錄條數。其中“在系統視圖中全表掃描尋找一條記錄時間”會根據tab2的大小而有所不同。若tab2記錄數較小,系統可以直接把表讀到系統區中;若tab2記錄數多,系統無法形成系統視圖,這時會每一次更新動作,就把子查詢做一次,速度會非常的慢。

針對這種情況的優化有兩種

1) 在tab1上的workdate, cino字段上加入索引,同時增加提示。

修改以后的SQL語句如下:

Update /*+ordered use_nl(sys, t)*/ tab1 t
set val1 = 1
where (workdate, cino) in (select workdate, cino from tab2)

其中sys表示系統視圖。如果不加入ordered提示,系統將會默認以tab1表作為驅動表,這時就要對tab1作全表掃描。加入提示后,使用系統視圖,即select workdate, cino from tab2,作為驅動表,在正常情況下,速度能提高很多。

2) 在tab2表上的workdate, cino字段加入索引,同時改寫SQL語句:

Update tab1 t
set val1 = 1
where exists (select 1
from tab2
where workdate = t.workdate
and cino = t.cino)

三,索引問題

update索引的使用比較特殊,有時看起來能用全索引,但實際上卻只用到一部分,所以建議把復合索引的各字段寫在一起。

例如:

Update /*+ordered use_nl(sys, t)*/ tab1 t
set val1 = 1
where cino in (select cino from tab2)
and workdate = '200506'

這條SQL語句是不能完全用到tab1上的復合索引workdate + cino的。能用到的只是workdate='200506'的約束。

如果寫成這樣,就沒問題:

Update /*+ordered use_nl(sys, t)*/ tab1 t
set val1 = 1
where (workdate, cino) in (select workdate, cino from tab2)

標簽:玉溪 商洛 文山 濟源 撫順 瀘州 吉林 廣西

巨人網絡通訊聲明:本文標題《update 子查詢使用介紹》,本文關鍵詞  update,子,查詢,使用,介紹,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《update 子查詢使用介紹》相關的同類信息!
  • 本頁收集關于update 子查詢使用介紹的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    日本大香伊一区二区三区| 激情小说欧美图片| 国产成人在线视频网站| 99久久国产综合精品色伊| 精品无码人妻一区二区免费蜜桃| 欧美日韩午夜在线视频| 亚洲三级电影网站| 国产高清无密码一区二区三区| 人人妻人人藻人人爽欧美一区| 欧美精品xxxxbbbb| 国产精品欧美久久久久一区二区| 极品尤物av久久免费看| 88久久精品无码一区二区毛片| 91麻豆精品国产91久久久资源速度| 亚洲综合激情另类小说区| 99精品久久久久久| gv天堂gv无码男同在线观看| 精品国产一区二区国模嫣然| 日本va欧美va瓶| 日韩av手机在线播放| 777午夜精品视频在线播放| 国产欧美综合在线| 国产中文字幕精品| 91视频免费在观看| 久久久久88色偷偷免费| 国产在线精品一区二区三区不卡 | 国产亚洲综合av| 韩国视频一区二区| 亚洲成人黄色av| 亚洲精品一区二区三区福利| 久久国产成人午夜av影院| 日本精品在线观看视频| 欧美一区二区三区免费视频| 亚洲大片一区二区三区| 久久久久9999| 久久精品视频一区二区| 成人激情免费视频| 欧美日韩精品专区| 麻豆精品在线观看| 老司机福利在线观看| 亚洲视频一区在线观看| 亚洲成年人av| 2023国产一二三区日本精品2022| 国产黄人亚洲片| 欧美图区在线视频| 久久精品国产99久久6| 欧美三级黄色大片| 亚洲国产成人精品视频| 午夜在线观看一区| 1024成人网| 久久人人妻人人人人妻性色av| 久久免费看少妇高潮| 99热国产精品| 日韩精品一区二区三区在线| 国产91精品入口| 这里只有精品99re| 国产福利一区二区三区在线视频| 欧美视频自拍偷拍| 韩国一区二区三区| 欧美日韩精品免费| 国产伦精一区二区三区| 欧美日韩亚洲综合| 国产麻豆9l精品三级站| 欧美日本韩国一区| 国产精品自拍一区| 欧美久久一二区| 国产成人欧美日韩在线电影| 欧美剧情电影在线观看完整版免费励志电影 | 日韩一区二区免费视频| 国产露脸91国语对白| 欧美日韩国产小视频在线观看| 久久激五月天综合精品| 在线免费精品视频| 久久99精品国产麻豆婷婷洗澡| 日本道免费精品一区二区三区| 久久99国产精品麻豆| 精品婷婷伊人一区三区三| 国产精品一区二区在线观看不卡| 91麻豆精品国产91久久久久 | 亚洲国产一二三| 三上悠亚在线观看视频| 日韩成人免费看| 在线免费一区三区| 国产99久久久国产精品潘金| 日韩一区国产二区欧美三区| av在线不卡网| 国产农村妇女毛片精品久久麻豆| a级一a一级在线观看| 亚洲品质自拍视频| 欧美日韩国产一二三区| 日韩精品电影一区亚洲| 色婷婷久久久久swag精品| 韩国女主播成人在线| 91麻豆精品久久久久蜜臀| jlzzjlzz欧美大全| 国产欧美久久久精品影院| 欧美bbbbb性bbbbb视频| 亚洲一区二区三区精品在线| 国产真实乱在线更新| 精品影院一区二区久久久| 91精品国产一区二区三区| 91亚洲男人天堂| 中文字幕中文字幕一区| 成人黄色短视频| 狠狠色综合日日| 日韩欧美的一区| 国产成人精品无码片区在线| 亚洲综合在线视频| 欧美亚洲综合一区| 9色porny自拍视频一区二区| 中文av一区特黄| 老司机精品免费视频| 久久99精品久久久久久国产越南| 日韩一级黄色片| 国产精品久久久久久亚洲色| 亚洲一区二区精品视频| 欧洲精品在线观看| 99久久免费视频.com| 国产精品三级av| 人人澡人人澡人人看| 国产精品1区2区| 日本一区二区三区在线不卡| 波多野结衣欲乱| 国产高清无密码一区二区三区| 久久精品日产第一区二区三区高清版| 公侵犯人妻一区二区三区| 免费的国产精品| 精品国内片67194| 精品欧美一区二区久久久| 看国产成人h片视频| 精品久久久久久久久久久院品网| 人妻精品久久久久中文字幕| 麻豆久久久久久| 国产男女无遮挡猛进猛出| 亚洲女与黑人做爰| 欧美色欧美亚洲另类二区| 中文字幕乱码在线人视频| 一区二区免费在线| 欧美裸体bbwbbwbbw| 熟妇人妻久久中文字幕| 青草国产精品久久久久久| 精品福利一二区| 99久久99久久精品免费看小说.| 国产成人一区二区精品非洲| 国产精品三级电影| 欧美在线观看视频一区二区| 乱码一区二区三区| 免费精品视频最新在线| 久久亚洲精品国产精品紫薇| 在线观看黄网址| 秋霞午夜鲁丝一区二区 | 欧美综合天天夜夜久久| 中文字幕99页| 久久99国产精品久久99果冻传媒| 日本一区二区免费在线观看视频| 色呦呦日韩精品| 天天躁日日躁狠狠躁av麻豆男男| 美女视频网站久久| 国产精品美日韩| 欧美日韩三级一区| 亚洲自拍偷拍图| av亚洲产国偷v产偷v自拍| 午夜伊人狠狠久久| 久久久99久久| 欧美伊人久久大香线蕉综合69| 不卡一区二区在线观看| 国产成人无遮挡在线视频| 亚洲黄一区二区三区| 欧美电视剧免费全集观看| 精品国产国产综合精品| 国产人妻精品午夜福利免费| 久久99九九99精品| 亚洲欧美日韩国产综合| 欧美一区二区三区公司| 午夜激情福利电影| 亚洲成年人在线观看| 国产在线不卡视频| 一区二区三区在线视频观看58| 日韩精品一区二| 色综合av在线| 波多野结衣 在线| 91亚洲男人天堂| 精品亚洲porn| 亚洲一区在线观看免费 | 久久久久久久久岛国免费| 日本二三区不卡| 国产午夜福利一区| 一级全黄裸体片| 国产高清不卡一区| 日本欧美久久久久免费播放网| 中文字幕一区视频| 精品美女在线观看| 欧美亚洲日本国产| 貂蝉被到爽流白浆在线观看| 亚洲精品久久一区二区三区777 | 最新日本中文字幕| 国产mv日韩mv欧美| 蜜臀久久99精品久久久久久9| 亚洲乱码日产精品bd| 国产三级一区二区|