最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

開發(fā)成功的oracle數(shù)據(jù)庫(kù)

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 07:36:43
文檔

開發(fā)成功的oracle數(shù)據(jù)庫(kù)

開發(fā)成功的oracle數(shù)據(jù)庫(kù):前言 1.基于數(shù)據(jù)庫(kù)(或依賴于數(shù)據(jù)庫(kù))構(gòu)建的應(yīng)用是否成功,這取決于如何使用數(shù)據(jù)庫(kù)。另外,從我的經(jīng)驗(yàn)看,所有應(yīng)用的構(gòu)建都圍繞 著數(shù)據(jù)庫(kù)。如果一個(gè)應(yīng)用未在任何地方持久地存儲(chǔ)數(shù)據(jù),很難想象這個(gè)應(yīng)用真的有用。 2.應(yīng)用總是在來(lái)來(lái)去去,而數(shù)據(jù)不同,它們
推薦度:
導(dǎo)讀開發(fā)成功的oracle數(shù)據(jù)庫(kù):前言 1.基于數(shù)據(jù)庫(kù)(或依賴于數(shù)據(jù)庫(kù))構(gòu)建的應(yīng)用是否成功,這取決于如何使用數(shù)據(jù)庫(kù)。另外,從我的經(jīng)驗(yàn)看,所有應(yīng)用的構(gòu)建都圍繞 著數(shù)據(jù)庫(kù)。如果一個(gè)應(yīng)用未在任何地方持久地存儲(chǔ)數(shù)據(jù),很難想象這個(gè)應(yīng)用真的有用。 2.應(yīng)用總是在來(lái)來(lái)去去,而數(shù)據(jù)不同,它們

前言 1.基于數(shù)據(jù)庫(kù)(或依賴于數(shù)據(jù)庫(kù))構(gòu)建的應(yīng)用是否成功,這取決于如何使用數(shù)據(jù)庫(kù)。另外,從我的經(jīng)驗(yàn)看,所有應(yīng)用的構(gòu)建都圍繞 著數(shù)據(jù)庫(kù)。如果一個(gè)應(yīng)用未在任何地方持久地存儲(chǔ)數(shù)據(jù),很難想象這個(gè)應(yīng)用真的有用。 2.應(yīng)用總是在“來(lái)來(lái)去去”,而數(shù)據(jù)不同,它們

前言

1.基于數(shù)據(jù)庫(kù)(或依賴于數(shù)據(jù)庫(kù))構(gòu)建的應(yīng)用是否成功,這取決于如何使用數(shù)據(jù)庫(kù)。另外,從我的經(jīng)驗(yàn)看,所有應(yīng)用的構(gòu)建都圍繞
著數(shù)據(jù)庫(kù)。如果一個(gè)應(yīng)用未在任何地方持久地存儲(chǔ)數(shù)據(jù),很難想象這個(gè)應(yīng)用真的有用。
2.應(yīng)用總是在“來(lái)來(lái)去去”,而數(shù)據(jù)不同,它們會(huì)永遠(yuǎn)存在。從長(zhǎng)遠(yuǎn)來(lái)講,我們的目標(biāo)并不是構(gòu)建應(yīng)用,而應(yīng)該是如何使用這些應(yīng)用
底層的數(shù)據(jù)。
3. 開發(fā)小組的核心必須有一些精通數(shù)據(jù)庫(kù)的開發(fā)人員,他們要負(fù)責(zé)確保數(shù)據(jù)庫(kù)邏輯是可靠的,系統(tǒng)能夠順利構(gòu)建。如果已成事實(shí)(應(yīng)
用已經(jīng)部署)之后再去調(diào)優(yōu),這通常表明,在開發(fā)期間你沒(méi)有認(rèn)真考慮這些問(wèn)題。

正文

了解數(shù)據(jù)庫(kù)

1.數(shù)據(jù)庫(kù)的體系結(jié)構(gòu),數(shù)據(jù)庫(kù)如何工作,以及有怎樣的表現(xiàn)。
2.并發(fā)控制是什么,并發(fā)控制對(duì)你意味著什么。
3.性能、可擴(kuò)縮性和安全性都是開發(fā)時(shí)就應(yīng)該考慮的需求,必須適當(dāng)?shù)刈龀鲈O(shè)計(jì),不要指望能碰巧滿足這些需求。
4.數(shù)據(jù)庫(kù)的特性如何實(shí)現(xiàn)。某個(gè)特定數(shù)據(jù)庫(kù)特性的實(shí)際實(shí)現(xiàn)方式可能與你想象的不一樣。你必須根據(jù)數(shù)據(jù)庫(kù)實(shí)際上如何工作(而不
是認(rèn)為它應(yīng)該如何工作)來(lái)進(jìn)行設(shè)計(jì)。
5.數(shù)據(jù)庫(kù)已經(jīng)提供了哪些特性,為什么使用數(shù)據(jù)庫(kù)已提供的特性要優(yōu)于自行構(gòu)建自己的特性。
6.為什么粗略地了解SQL還不夠,還需要更深入地學(xué)習(xí)SQL。
7.DBA和開發(fā)人員都在為同一個(gè)目標(biāo)努力,他們不是敵對(duì)的兩個(gè)陣營(yíng),不是想在每個(gè)回合中比試誰(shuí)更聰明。

如果可能,盡量利用一條SQL語(yǔ)句完成工作。


1. 如果無(wú)法用一條SQL語(yǔ)句完成,就通過(guò)PL/SQL實(shí)現(xiàn)(不過(guò),盡可能少用PL/SQL?。?br> 2.如果在PL/SQL中也無(wú)法做到(因?yàn)樗鄙僖恍┨匦?,如列出目錄中的文件),可以試試使用Java存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)。不過(guò),有了Oracle9i 及以上版本后,如今需要這樣做的可能性極小。
3.如果用Java 還辦不到,那就在C 外部過(guò)程中實(shí)現(xiàn)。如果速度要求很高,或者要使用采用C 編寫的一個(gè)第三方API,就常常使用這種做法。
4.如果在C外部例程中還無(wú)法實(shí)現(xiàn),你就該好好想想有沒(méi)有必要做這個(gè)工作了。

SQL優(yōu)化--基本概念

數(shù)據(jù)庫(kù)訪問(wèn)表數(shù)據(jù)的方式

Oracle雖然可以通過(guò)各種執(zhí)行方式存取數(shù)據(jù),但是在最后訪問(wèn)數(shù)據(jù)表時(shí)只有兩種方式。

?全表掃描

全表掃描就是順序地訪問(wèn)表中每條記錄。Oracle將數(shù)據(jù)保存在數(shù)據(jù)塊(database block)中,通過(guò)一次讀入多個(gè)數(shù)據(jù)塊的方式優(yōu)化全表掃描。

數(shù)據(jù)塊是數(shù)據(jù)庫(kù)存取數(shù)據(jù)的最小I/O單位,只有將數(shù)據(jù)塊讀到內(nèi)存中才能查找數(shù)據(jù)。

?通過(guò)ROWID訪問(wèn)表

ROWID是Oracle數(shù)據(jù)庫(kù)的一個(gè)偽列,唯一標(biāo)識(shí)數(shù)據(jù)表中的數(shù)據(jù)行,數(shù)據(jù)一旦插入數(shù)據(jù)庫(kù),該行的ROWID將不能再被改變。

ROWID是訪問(wèn)數(shù)據(jù)表的最快方法,通過(guò)ROWID,Oracle可以直接定位到數(shù)據(jù)塊上。

索引除了包含索引列值外還存儲(chǔ)對(duì)應(yīng)行的ROWID,所以,提供了快速訪問(wèn)ROWID的方法,因此,基于索引的查詢性能很高。

索引的代價(jià)

索引雖然是提高數(shù)據(jù)查詢最有效的方法,但是無(wú)效的索引會(huì)造成數(shù)據(jù)庫(kù)空間的浪費(fèi),甚至大大降低查詢性能。

1.索引需要磁盤空間存儲(chǔ)

2.執(zhí)行數(shù)據(jù)修改操作(INSERT、UPDATE、DELETE)產(chǎn)生索引維護(hù)

3.在數(shù)據(jù)處理時(shí)需額外的回退空間

4.索引和數(shù)據(jù)不在一個(gè)數(shù)據(jù)塊上,使用索引會(huì)增加系統(tǒng)I/O

建議一張表的索引不要超過(guò)3個(gè),但是對(duì)于穩(wěn)定表可以多建立索引提高查詢速度。

索引的分類

?索引按功能分類

–Primary key(主關(guān)鍵字)

–Foreign key(外鍵)

–Unique Index(唯一索引)

–Index(一般索引)

?索引按存儲(chǔ)方法分類

–B-樹索引

–位圖索引

–HASH索引

–索引編排表

–反轉(zhuǎn)鍵索引

–分區(qū)索引

–本地和全局索引

?索引按對(duì)象分類

–單列索引(表單個(gè)字段的索引)

–多列索引(表多個(gè)字段的索引)

函數(shù)索引(對(duì)字段進(jìn)行函數(shù)運(yùn)算的索引)

?Primary key(主關(guān)鍵字)

主關(guān)鍵字是保證在一個(gè)表中的數(shù)據(jù)唯一,在創(chuàng)建主關(guān)鍵字時(shí),數(shù)據(jù)庫(kù)自動(dòng)在主關(guān)鍵字上創(chuàng)建唯一索引。一個(gè)表只能創(chuàng)建一個(gè)主關(guān)鍵字。

?Foreign key(外鍵)

外鍵是表和表之間建立主從關(guān)系,又叫父子關(guān)系,外鍵只能關(guān)聯(lián)到主表的主鍵或唯一索引上(因?yàn)殛P(guān)系型數(shù)據(jù)庫(kù)不支持多對(duì)多關(guān)系)。外鍵并不自動(dòng)創(chuàng)建索引。

對(duì)于一對(duì)多的兩個(gè)表,外鍵建立在多的表上。必須滿足“有子必有父”的關(guān)系,即插入數(shù)據(jù)必須先插入主表數(shù)據(jù)后才能插入子表數(shù)據(jù),刪除主表數(shù)據(jù)前必須刪除子表數(shù)據(jù)。

?Unique Index(唯一索引)

創(chuàng)建唯一索引的字段或組合字段在數(shù)據(jù)上必須唯一。

?Index(一般索引)

一般索引沒(méi)有數(shù)據(jù)約束限制,目的是為了加快查詢速度。

不能對(duì)字段或組合字段重復(fù)創(chuàng)建索引,組合字段重復(fù)是指字段和字段順序完全相同。

?B-樹索引

B-樹索引是最常用的索引,其存儲(chǔ)結(jié)構(gòu)類似書的索引結(jié)構(gòu),有分支和葉兩種類型的存儲(chǔ)數(shù)據(jù)塊,分支塊相當(dāng)于書的大目錄,葉塊相當(dāng)于索引到的具體的書頁(yè)。一般索引及唯一約束索引都使用B-樹索引。

?位圖索引

位圖索引儲(chǔ)存主要用來(lái)節(jié)省空間,減少數(shù)據(jù)塊的訪問(wèn),它采用位圖偏移方式來(lái)與表的行ID號(hào)對(duì)應(yīng),采用位圖索引一般是重復(fù)值多的表字段。位圖索引在OLTP(數(shù)據(jù)事務(wù)處理)中用得比較少,因?yàn)镺LTP會(huì)對(duì)表進(jìn)行大量的刪除、修改、新建操作。在OLAP(數(shù)據(jù)分析處理)中應(yīng)用位圖有優(yōu)勢(shì),因?yàn)镺LAP中大部分是對(duì)數(shù)據(jù)庫(kù)的查詢操作,而且一般采用數(shù)據(jù)倉(cāng)庫(kù)技術(shù),所以大量數(shù)據(jù)采用位圖索引節(jié)省空間比較明顯。

注:B-樹索引中包含ROWID,Oracle可以在行級(jí)別上鎖定索引。位圖索引被存儲(chǔ)為壓縮的索引值,是一個(gè)范圍內(nèi)的ROWID,因此ORACLE必須針對(duì)一個(gè)給定值鎖定所有范圍內(nèi)的ROWID,極易造成死鎖。

單列索引

以單個(gè)字段建立的索引

多列索引

已多個(gè)字段組合建立的索引

函數(shù)索引(對(duì)字段進(jìn)行函數(shù)運(yùn)算的索引)

在索引中使用函數(shù)或者表達(dá)式,這些函數(shù)可以是Oracle的函數(shù),也可以是用戶自己的PL/SQL函數(shù)等 ,函數(shù)索引是大小寫敏感的。

在什么情況下應(yīng)該建立索引

–表主關(guān)鍵字

數(shù)據(jù)庫(kù)自動(dòng)建立索引

–字段唯一性約束

–主從表關(guān)聯(lián)

因?yàn)樵诓樵冎薪?jīng)常會(huì)和其他表關(guān)聯(lián)查詢

–經(jīng)常查詢字段或組合查詢字段

–查詢中排序或分組的字段

索引是排序的,所以,排序字段或分組字段如果通過(guò)索引去訪問(wèn)將大大提高查詢速度

在什么情況下不應(yīng)該建立索引

–表記錄很少的表

數(shù)據(jù)庫(kù)使用索引,必須先訪問(wèn)索引表,再通過(guò)索引表訪問(wèn)數(shù)據(jù)表,一般索引與數(shù)據(jù)表不在同一個(gè)數(shù)據(jù)塊,Oracle至少要讀取數(shù)據(jù)塊兩次。如果表數(shù)據(jù)很少,Oracle會(huì)將所有的數(shù)據(jù)一次讀出,處理速度顯然會(huì)比用索引快。

–經(jīng)常更新的表(不穩(wěn)定表)

數(shù)據(jù)更新會(huì)造成索引的維護(hù),影響數(shù)據(jù)更新時(shí)間。

–數(shù)據(jù)重復(fù)且分布均勻字段

對(duì)于大數(shù)據(jù)表,如果一個(gè)字段只有少量的值,并且分布平均,建立該字段的索引一般不會(huì)提高數(shù)據(jù)庫(kù)的查詢速度。

SQL優(yōu)化--索引概念

通過(guò)Developer看索引使用

Developer提供了Explain plan Window圖形窗口,可以方便地看到SQL的執(zhí)行計(jì)劃。

啟動(dòng)Explain plan Window有兩種方法,第一種在SQL Window下輸入sql,按F5,第二種,使用菜單new/Explain plan Window。

?窗體介紹

窗體分為兩大部分,上半部分是sql區(qū),可以在此輸入要分析的sql,下半部分是SQL的執(zhí)行計(jì)劃。Optimizer goal可以選擇優(yōu)化器,其中:

–First_Rows:基于CBO的優(yōu)化器,側(cè)重于返回一條結(jié)果記錄,大多數(shù)使用Single Block IO(類似于Index Scan)

–All_Rows: 基于CBO的優(yōu)化器,側(cè)重于返回所有結(jié)果記錄,大多數(shù)使用Mutil Block IO(類似于Full Table Scan)

–Rule: 基于RBO的優(yōu)化器

–Choose: 根據(jù)表是否做過(guò)分析來(lái)選擇使用RBO還是CBO。如果有一個(gè)或以上的表做過(guò)表分析,則使用CBO;如果都沒(méi)有做過(guò)表分析,則使用RBO。

用導(dǎo)航按鍵查看執(zhí)行步驟,執(zhí)行步驟是從上到下,從內(nèi)到外。

優(yōu)化器

目前Oracle的優(yōu)化器共有三種:

–Rule基于規(guī)則-- Rule Based Optimizer

–Cost基于成本-- Cost Based Optimizer

–Choose選擇性。

數(shù)據(jù)庫(kù)在默認(rèn)安裝情況下,Oracle使用Choose優(yōu)化器。

Rule(基于規(guī)則--Rule Based Optimizer)

From子句從外側(cè)向內(nèi)側(cè)的順序檢索表,Where子句從下向上解析條件。

根據(jù)From規(guī)則,在多表查詢時(shí),將返回結(jié)果集最少的表作為基礎(chǔ)表,寫在From最外側(cè)(并不是最小的表,應(yīng)該是查詢限定最強(qiáng)的表,一般情況下是查詢主體表),然后根據(jù)表之間的限定依賴關(guān)系依次從外側(cè)寫到內(nèi)側(cè)。Oracle執(zhí)行時(shí),首先掃描最外側(cè)表(驅(qū)動(dòng)表),并對(duì)結(jié)果集進(jìn)行排序,然后掃描內(nèi)側(cè)表(被探測(cè)表),將第二個(gè)表檢索出的結(jié)果集(用Row Source2表示)與第一個(gè)表中相應(yīng)結(jié)果集(用Row Source1表示)進(jìn)行合并后再次向內(nèi)側(cè)表掃描合并,直到全部表被檢索合并,返回結(jié)果集。

根據(jù)Where規(guī)則,先寫表連接,表連接從內(nèi)側(cè)向外側(cè)的順序?qū)懀梢赃^(guò)濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的末尾(結(jié)合From規(guī)則,末尾的查詢條件應(yīng)該是最外側(cè)的表)。寫查詢條件時(shí)應(yīng)該按照使用的索引字段順序從上寫到下。

當(dāng)查詢表有N個(gè),表關(guān)聯(lián)應(yīng)該是N-1個(gè)。

Cost(基于成本--Cost Based Optimizer)

CBO是依賴表的統(tǒng)計(jì)信息來(lái)選擇最低成本的執(zhí)行計(jì)劃, 這些統(tǒng)計(jì)使用ANALYZE命令完成,在使用CBO之前必須將Table分析好。

CBO最多只能排列2000種表的排列關(guān)系,也就是說(shuō)當(dāng)超過(guò)6個(gè)以上的表(2的7次方大于2000)進(jìn)行關(guān)聯(lián)時(shí),CBO就不能把所有的排列關(guān)系都計(jì)算到,會(huì)遺漏一些,所以這個(gè)時(shí)候生成的執(zhí)行計(jì)劃據(jù)可能不是最優(yōu)的。

對(duì)于數(shù)據(jù)變化比較大的表,你必須經(jīng)常運(yùn)行analyze 命令,以增加數(shù)據(jù)庫(kù)中的對(duì)象統(tǒng)計(jì)信息(object statistics)的準(zhǔn)確性,以提高系統(tǒng)效率。

語(yǔ)法:

analyze table table_name estimate statistics sample x percent;

--抽樣估算法,使用x%抽樣率對(duì)table_name表分析

analyze table table_name compute statistics;

--完全計(jì)算法

對(duì)表作完全計(jì)算所花的時(shí)間相當(dāng)于做全表掃描,抽樣估算法由于采用抽樣,比完全計(jì)算法的生成統(tǒng)計(jì)速度要快,如果不是要求要有精確數(shù)據(jù)的話,盡量采用抽樣分析法。建議對(duì)表分析采用抽樣估算,對(duì)索引分析可以采用完全計(jì)算。

Choose(選擇性)

根據(jù)表是否做過(guò)分析來(lái)選擇使用RBO還是CBO。如果有一個(gè)以上的表做過(guò)表分析,則使用CBO;如果都沒(méi)有做過(guò)表分析,則使用RBO。

索引的掃描分類

?索引唯一掃描(Index unique scan)

?索引范圍掃描(Index range scan)

?索引全掃描(Index full scan)

?索引快速掃描(Index fast full scan)

?索引跳躍掃描(Index skip scan)

索引唯一掃描(Index unique scan)

通過(guò)唯一索引返回單行數(shù)據(jù)的查詢方法稱為索引唯一掃描。如果存在UNIQUE 或PRIMARY KEY 約束(它保證了語(yǔ)句只存取單行)的話,Oracle經(jīng)常實(shí)現(xiàn)唯一性掃描。

如EMP表創(chuàng)建了Id主關(guān)鍵字,如果使用Id作為條件查詢,Oracle使用Index Unique Scan。

Select * from emp where id = 2343;

索引范圍掃描(index range scan)

使用一個(gè)索引返回多行數(shù)據(jù)的查詢方法稱為索引范圍掃描。使用索引范圍掃描的情況有:

–在唯一索引列上使用了range操作符(> < <> >= <= between)

–在組合索引上,只使用部分字段進(jìn)行查詢,導(dǎo)致查詢出多行

–對(duì)非唯一索引列上進(jìn)行的任何查詢。

索引全掃描(index full scan)

全索引掃描只發(fā)生在CBO模式下。當(dāng)CBO根據(jù)統(tǒng)計(jì)數(shù)值判斷全索引掃描比全表掃描更有效時(shí),才進(jìn)行全索引掃描,而且此時(shí)查詢出的數(shù)據(jù)都必須從索引中可以直接得到。

如select id from emp order by id;

因?yàn)椴樵冏侄螌儆谒饕侄瓮瑫r(shí)需要索引字段排序,Oracle使用Index full scan。

索引快速掃描(index fast full scan)

掃描索引中的所有的數(shù)據(jù)塊,與 index full scan很類似,但是一個(gè)顯著的區(qū)別就是它不對(duì)查詢出的數(shù)據(jù)進(jìn)行排序,即數(shù)據(jù)不是以排序順序被返回。在這種存取方法中,可以使用多塊讀功能,也可以使用并行讀入,以便獲得最大吞吐量與縮短執(zhí)行時(shí)間。

如select id from emp;

索引跳躍掃描(Index skip scan)

當(dāng)查詢條件沒(méi)有使用組合查詢的前導(dǎo)列,優(yōu)化器可以使用跳躍掃描,跳躍掃描比全掃描性能高。

表的關(guān)聯(lián)

在ORACLE中表的關(guān)聯(lián)有三種:

–Sort merger join(排序合并關(guān)聯(lián))

–Nested Loops(嵌套循環(huán))

–Hash join(哈希關(guān)聯(lián))

Sort Merger join(排序合并關(guān)聯(lián))

多出現(xiàn)于大表和大表以索引的方式連接。

執(zhí)行過(guò)程:

1.掃描第一個(gè)表返回結(jié)果集,然后按照關(guān)聯(lián)列排序;

2.掃描第二個(gè)表返回結(jié)果集,然后按照關(guān)聯(lián)列排序;

3.兩邊已排序的行被放在一起執(zhí)行合并操作。

此連接方式建立在排序的基礎(chǔ)上,而排序操作消耗的系統(tǒng)資源很大,所以,這種方式對(duì)于結(jié)果集已經(jīng)排序的連接比較有效。

Nested Loops(鑲嵌循環(huán))

多出現(xiàn)于小表和大表關(guān)聯(lián)

執(zhí)行過(guò)程:

1.掃描第一個(gè)表(驅(qū)動(dòng)表)Row source1;

2.循環(huán)Row source1;

3.探索第二個(gè)表(被探查表)Row rource2。

4.重復(fù)2~3直到循環(huán)完Row source。

此連接方式的關(guān)鍵是驅(qū)動(dòng)表的返回?cái)?shù)據(jù)集要少,同時(shí)被探查表的匹配要有索引支持。另外,此連接是最快得到第一個(gè)匹配行的方式,所以,可以實(shí)現(xiàn)快速的響應(yīng)時(shí)間,因?yàn)榇诉B接不必等待所有的連接操作處理完才返回?cái)?shù)據(jù)。

如果驅(qū)動(dòng)表的數(shù)量比較大,查詢性能不如全表掃描.

Hash join(哈希關(guān)聯(lián))

只能用于相等連接,且只能在CBO優(yōu)化器模式下,多出現(xiàn)于小表和大表關(guān)聯(lián)

執(zhí)行過(guò)程:

1.掃描第一個(gè)表(驅(qū)動(dòng)表)返回?cái)?shù)據(jù)集,構(gòu)建Hash表;

2.讀取第二個(gè)表的一條數(shù)據(jù),和內(nèi)存中的數(shù)據(jù)進(jìn)行匹配;

此連接方式對(duì)于CPU的消耗比較大,并取決于內(nèi)存的大小,因?yàn)镺racle在內(nèi)存中建立Hash表。

SQL優(yōu)化--小結(jié)

有關(guān)SQL的優(yōu)化涉及的范圍很廣,相關(guān)的知識(shí)需要在實(shí)踐中不斷總結(jié)和積累。學(xué)習(xí)完本節(jié)需要掌握的知識(shí):

–Oracle的優(yōu)化器

–索引的不同分類

–表關(guān)聯(lián)的方式

–如果使用Explain Plan Window查看執(zhí)行計(jì)劃

–寫DML時(shí)應(yīng)該用不同的sql看性能優(yōu)劣再確定sql

在PC機(jī)上正確創(chuàng)建索引并正確使用索引的情況下,上千萬(wàn)條數(shù)據(jù)的單表查詢應(yīng)該在0.1秒左右,如果使用多表關(guān)聯(lián)查詢不應(yīng)該超過(guò)0.6秒,但是對(duì)于分組查詢可能超過(guò)1秒。如果超過(guò)你寫的查詢超過(guò)這些參考值,說(shuō)明你寫的SQL還有優(yōu)化的可能。

數(shù)據(jù)庫(kù)的高伸縮性--并行控制

死鎖:

當(dāng)兩個(gè)事務(wù)需要一組有沖突的鎖,而不能將事務(wù)繼續(xù)下去的話,就出現(xiàn)死鎖 。

查詢死鎖

select b.username,b.sid,b.serial#,logon_time

from v$locked_objecta,v$session b

where a.session_id = b.sid order by b.logon_time;

也可以在Developer中可以使用tools\Sessions...中的Lock查看鎖定情況

殺死死鎖

SQL>alter system kill session 'sid,serial#';

--如果有ora-00031錯(cuò)誤,則在后面加immediate;

SQL>alter system kill session 'sid,serial#' immediate;

總結(jié)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

文檔

開發(fā)成功的oracle數(shù)據(jù)庫(kù)

開發(fā)成功的oracle數(shù)據(jù)庫(kù):前言 1.基于數(shù)據(jù)庫(kù)(或依賴于數(shù)據(jù)庫(kù))構(gòu)建的應(yīng)用是否成功,這取決于如何使用數(shù)據(jù)庫(kù)。另外,從我的經(jīng)驗(yàn)看,所有應(yīng)用的構(gòu)建都圍繞 著數(shù)據(jù)庫(kù)。如果一個(gè)應(yīng)用未在任何地方持久地存儲(chǔ)數(shù)據(jù),很難想象這個(gè)應(yīng)用真的有用。 2.應(yīng)用總是在來(lái)來(lái)去去,而數(shù)據(jù)不同,它們
推薦度:
  • 熱門焦點(diǎn)
專題
Top

抖音扫码关注

手机端二维码

每天分享百科知识!