版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、大型ORACL數(shù)據(jù)庫優(yōu)化設(shè)計(jì)方案本文主要從大型數(shù)據(jù)庫 ORACLE境四個不同級別的調(diào) 整分析入手,分析ORACL的系統(tǒng)結(jié)構(gòu)和工作機(jī)理,從 九個不同方面較全面地總結(jié)了 ORACL數(shù)據(jù)庫的優(yōu)化調(diào) 整方案。關(guān)鍵詞ORACL瞰據(jù)庫 環(huán)境調(diào)整 優(yōu)化設(shè)計(jì) 方案對于ORACL數(shù)據(jù)庫的數(shù)據(jù)存取,主要有四個不同的調(diào)整級別,第一級調(diào)整是操作系統(tǒng)級包括硬件平臺,第二級調(diào)整是ORACLE RDB闕勺調(diào)整,第三級是數(shù)據(jù)庫設(shè)計(jì)級的調(diào)整,最后一個調(diào)整級是SQLao通常依此四級調(diào)整級別對數(shù)據(jù)庫進(jìn)行調(diào)整、優(yōu)化,數(shù)據(jù)庫的整體性能會得到很大的改善。下面從九個不同方面介紹ORACL數(shù)據(jù)庫優(yōu)化設(shè)計(jì)方案。一、數(shù)據(jù)庫優(yōu)化自由結(jié)構(gòu) OFA(
2、Optimal flexible Architecture)數(shù)據(jù)庫的邏輯配置對數(shù)據(jù)庫性能有很大的影響,為此,ORACL蟲司對表空間設(shè)計(jì)提出了一種優(yōu)化結(jié)構(gòu)OFA使用這種結(jié)構(gòu)進(jìn)行設(shè)計(jì)會大大簡化物理設(shè)計(jì)中的數(shù)據(jù)管理。優(yōu)化自由結(jié)構(gòu) OFA,簡單地講就是在數(shù)據(jù)庫中可以高效自由地分布邏輯數(shù)據(jù)對象,因此首先要對數(shù)據(jù)庫中的邏輯對象根據(jù)他們的使用方式和物理結(jié)構(gòu)對數(shù)據(jù)庫的影響來進(jìn)行分類,這種分類包括將系統(tǒng)數(shù)據(jù)和用戶數(shù)據(jù)分開、一般數(shù)據(jù)和索引數(shù)據(jù)分開、低活動表和高活動表分開等等。數(shù)據(jù)庫邏輯設(shè)計(jì)的結(jié)果應(yīng)當(dāng)符合下面的準(zhǔn)則:(1)把 以同樣方式使用的段類型存儲在一起;(2)按照標(biāo)準(zhǔn)使用來設(shè)計(jì)系統(tǒng);(3)存在用于例外的分離區(qū)
3、域; (4)最小化表空間沖突;(5)將數(shù)據(jù)字典分離。二、充分禾1J用系統(tǒng)全局區(qū)域 SGA(SYSTEM GLOBAL AREA)SGA oracle數(shù)據(jù)庫的心臟。用戶的進(jìn)程對這個內(nèi)存 區(qū)發(fā)送事務(wù),并且以這里作為高速緩存讀取命中的數(shù) 據(jù),以實(shí)現(xiàn)加速的目的。正確的 SG秋小對數(shù)據(jù)庫的性能至關(guān)重要。SG鮑括以下幾個部分:1、數(shù)據(jù)塊緩沖區(qū)(data block buffer cache )是 SGA 中的一塊高速緩存,占整個數(shù)據(jù)庫大小的1%-2%用來存儲數(shù)據(jù)庫重讀取的數(shù)據(jù)塊(表、索引、簇等), 因此采用least recently used (LRU, 最近最少使用) 的方法進(jìn)行空間管理。2、字典緩沖
4、區(qū)。該緩沖區(qū)內(nèi)的信息包括用戶賬號數(shù)據(jù)、數(shù)據(jù)文件名、段名、盤區(qū)位置、表說明和權(quán)限, 它也采用LRU方式管理。3、重做日志緩沖區(qū)。該緩沖區(qū)保存為數(shù)據(jù)庫恢復(fù)過程 中用于前滾操作。4、SQL共享池。保存執(zhí)行計(jì)劃和運(yùn)行數(shù)據(jù)庫的 SQL語 句的語法分析樹。也采用LRU算法管理。如果設(shè)置過 小,語句將被連續(xù)不斷地再裝入到庫緩存,影響系統(tǒng)性能。另外,SGAa包括大池、JAVA池、多緩沖池。但是主 要是由上面4種緩沖區(qū)構(gòu)成。對這些內(nèi)存緩沖區(qū)的合 理設(shè)置,可以大大加快數(shù)據(jù)查詢速度,一個足夠大的 內(nèi)存區(qū)可以把絕大多數(shù)數(shù)據(jù)存儲在內(nèi)存中,只有那些 不怎么頻繁使用的數(shù)據(jù),才從磁盤讀取,這樣就可以大大提高內(nèi)存區(qū)的命中率。三
5、、規(guī)范與反規(guī)范設(shè)計(jì)數(shù)據(jù)庫1、規(guī)范化范式是符合某一級別的關(guān)系模式的集合,根據(jù)約束條 件的不同,一般有1NR 2NR 3NF三種范式。規(guī)范化 理論是圍繞這些范式而建立的。規(guī)范化的基本思想是 逐步消除數(shù)據(jù)依賴中不合適的部分,使模式中的各關(guān) 系模式達(dá)到某種程度的“分離”,即采用“一事一地”的模式設(shè)計(jì)原則,因此,所謂規(guī)范化實(shí)質(zhì)上就是 概念的單一化。數(shù)據(jù)庫中數(shù)據(jù)規(guī)范化的優(yōu)點(diǎn)是減少了 數(shù)據(jù)冗余,節(jié)約了存儲空間,相應(yīng)邏輯和物理的I/O次數(shù)減少,同時加快了增、刪、改的速度。但是一個 完全規(guī)范化的設(shè)計(jì)并不總能生成最優(yōu)的性能,因?yàn)閷?數(shù)據(jù)庫查詢通常需要更多的連接操作,從而影響到查 詢的速度。故有時為了提高某些查詢或
6、應(yīng)用的性能而 有意破壞規(guī)范規(guī)則,即反規(guī)范化。2、反規(guī)范化反規(guī)范的必要性是否規(guī)范化的程度越高越好呢?答案是否定的,應(yīng)根 據(jù)實(shí)際需要來決定,因?yàn)椤胺蛛x”越深,產(chǎn)生的關(guān)系 越多,結(jié)構(gòu)越復(fù)雜。關(guān)系越多,連接操作越頻繁,而 連接操作是最費(fèi)時間的,在數(shù)據(jù)庫設(shè)計(jì)中特別對以查 詢?yōu)橹鞯臄?shù)據(jù)庫設(shè)計(jì)來說,頻繁的連接會嚴(yán)重影響查 詢速度。所以,在數(shù)據(jù)庫的設(shè)計(jì)過程中有時故意保留 非規(guī)范化約束,或者規(guī)范化以后又反規(guī)范,這樣做通 常是為了改進(jìn)數(shù)據(jù)庫的查詢性能,加快數(shù)據(jù)庫系統(tǒng)的 響應(yīng)速度。反規(guī)范技術(shù)在進(jìn)行反規(guī)范設(shè)計(jì)之前,要充分考慮數(shù)據(jù)的存取需 求,常用表的大小、特殊的計(jì)算、數(shù)據(jù)的物理存儲 等。常用的反規(guī)范技術(shù)有合理增加冗余
7、列、派生列, 或重新組表幾種。反規(guī)范化的好處是降低連接操作的 需求、降低外碼和索引數(shù)目,減少表的個數(shù),從而提 高查詢速度,這對于性能要求相對較高的數(shù)據(jù)庫系統(tǒng) 來說,能有效地改善系統(tǒng)的性能,但相應(yīng)的問題是可 能影響數(shù)據(jù)的完整性,加快查詢速度的同時降低修改 速度。3、數(shù)據(jù)庫設(shè)計(jì)中的優(yōu)化策略數(shù)據(jù)應(yīng)當(dāng)按兩種類別進(jìn)行組織:頻繁訪問的數(shù)據(jù)和頻 繁修改的數(shù)據(jù)。對于頻繁訪問但是不頻繁修改的數(shù)據(jù),內(nèi)部設(shè)計(jì)應(yīng)當(dāng)物理不規(guī)范化。對于頻繁修改但并 不頻繁訪問的數(shù)據(jù),內(nèi)部設(shè)計(jì)應(yīng)當(dāng)物理規(guī)范化。比較 復(fù)雜的方法是將規(guī)范化的表作為邏輯數(shù)據(jù)庫設(shè)計(jì)的基 礎(chǔ),然后再根據(jù)整個應(yīng)用系統(tǒng)的需要,物理地非規(guī)范 化數(shù)據(jù)。規(guī)范與反規(guī)范都是建立在
8、實(shí)際的操作基礎(chǔ)之 上的約束,脫離了實(shí)際兩者都沒有意義。只有把兩者 合理地結(jié)合在一起,才能相互補(bǔ)充,發(fā)揮各自的優(yōu)點(diǎn)。四、合理設(shè)計(jì)和管理表1、利用表分區(qū)分區(qū)將數(shù)據(jù)在物理上分隔開,不同分區(qū)的數(shù)據(jù)可以制 定保存在處于不同磁盤上的數(shù)據(jù)文件里。這樣,當(dāng)對 這個表進(jìn)行查詢時,只需要在表分區(qū)中進(jìn)行掃描,而 不必進(jìn)行FTS(Full Table Scan ,全表掃描),明顯縮短了查詢時間,另外處于不同磁盤的分區(qū)也將對這個 表的數(shù)據(jù)傳輸分散在不同的磁盤I/O , 一個精心設(shè)置的分區(qū)可以將數(shù)據(jù)傳輸對磁盤I/O競爭均勻地分散開。2、避免出現(xiàn)行連接和行遷移在建立表時,由于參數(shù) pctfree 和pctused不正確的
9、設(shè)置,數(shù)據(jù)塊中的數(shù)據(jù)會出現(xiàn)行鏈接和行遷移,也就 是同一行的數(shù)據(jù)不保存在同一的數(shù)據(jù)塊中。如果在進(jìn) 行數(shù)據(jù)查詢時遇到了這些數(shù)據(jù),那么為了讀出這些數(shù) 據(jù),磁頭必須重新定位,這樣勢必會大大降低數(shù)據(jù)庫 執(zhí)行的速度。因此,在創(chuàng)建表時,就應(yīng)該充分估計(jì)到 將來可能出現(xiàn)的數(shù)據(jù)變化,正確地設(shè)置這兩個參數(shù),盡量減少數(shù)據(jù)庫中出現(xiàn)行鏈接和行遷移。3、控制碎片碎片(fragmentation) 是對一組非鄰接的數(shù)據(jù)庫對象的 描述。碎片意味著在執(zhí)行數(shù)據(jù)庫的功能時要耗費(fèi)額外 的資源(磁盤I/O ,磁盤驅(qū)動的循環(huán)延遲,動態(tài)擴(kuò)展, 鏈接的塊等),并浪費(fèi)大量磁盤空間。當(dāng)兩個或多個 數(shù)據(jù)對象在相同的表空間中,會發(fā)生區(qū)間交叉。在動 態(tài)
10、增長中,對象的區(qū)間之間不再相互鄰接。為了消除 區(qū)間交叉將靜態(tài)的或只有小增長的表放置在一個表空問中,而把動態(tài)增長的對象分別放在各自的表空問中。在 create table 、create index 、createtablespace、create cluster 時,在 storage 子句中的參數(shù)的合理設(shè)置,可以減少碎片的產(chǎn)生。4、別名的使用別名是大型數(shù)據(jù)庫的應(yīng)用技巧,就是表名、列名在查詢中以一個字母為別名,查詢速度要比建連接表快1.5倍。5、回滾段的交替使用由于數(shù)據(jù)庫配置對應(yīng)用表具有相對靜止的數(shù)據(jù)字典和 極高的事務(wù)率特點(diǎn)。而且數(shù)據(jù)庫的系統(tǒng)索引段、數(shù)據(jù) 段也具有相對靜止,并發(fā)現(xiàn)在應(yīng)用中最高的
11、負(fù)荷是回 滾段表空間。把回滾段定義為交替引用,這樣就達(dá)到 了循環(huán)分配事務(wù)對應(yīng)的回滾段,可以使磁盤負(fù)荷很均 勻地分布。五、索引Index的優(yōu)化設(shè)計(jì)1、管理組織索引索引可以大大加快數(shù)據(jù)庫的查詢速度,索引把表中的 邏輯值映射到安全的RowIR因此索引能進(jìn)行快速定位數(shù)據(jù)的物理地址。但是有些 DBAt現(xiàn),對一個大型表 建立的索引,并不能改善數(shù)據(jù)查詢速度,反而會影響 整個數(shù)據(jù)庫的性能。這主要是和 SGA勺數(shù)據(jù)管理方式 有關(guān)。ORACL在進(jìn)行數(shù)據(jù)塊高速緩存管理時,索引數(shù) 據(jù)比普通數(shù)據(jù)具有更高的駐留權(quán)限,在進(jìn)行空間競爭 時,ORACL會先移出普通數(shù)據(jù)。對一個建有索引的大 型表的查詢時,索引數(shù)據(jù)可能會用完所有的
12、數(shù)據(jù)塊緩 存空間,ORACL不得不頻繁地進(jìn)行磁盤讀寫來獲取數(shù) 據(jù),因此在對一個大型表進(jìn)行分區(qū)之后,可以根據(jù)相 應(yīng)的分區(qū)建立分區(qū)索引。如果對這樣大型表的數(shù)據(jù)查詢比較頻繁,或者干脆不建索引。另外,DBAJ建索引時,應(yīng)盡量保證該索引最可能地被用于 where子句中,如果對查詢只簡單地制定一個索引,并不一定會 加快速度,因?yàn)樗饕仨氈付ㄒ粋€適合所需的訪問路 徑。2、聚簇的使用Oracle提供了另一種方法來提高查詢速度,就是聚簇 (Cluster ) o所謂聚簇,簡單地說就是把幾個表放在 一起,按一定公共屬性混合存放。聚簇根據(jù)共同碼值 將多個表的數(shù)據(jù)存儲在同一個 Oracle塊中,這時檢索 一組Orac
13、le塊就同時得到兩個表的數(shù)據(jù),這樣就可以 減少需要存儲的Oracle塊,從而提高應(yīng)用程序的性 能。3、優(yōu)化設(shè)置的索引,就必須充分利用才能加快數(shù)據(jù)庫 訪問速度。ORACL酸使用一個索引,有一些最基本的 條件:1)、where子名中的這個字段,必須是復(fù)合索 引的第一個字段;2)、where子名中的這個字段,不 應(yīng)該參與任何形式的計(jì)算。六、多 CPUffi并行查詢 PQO(Parallel Query Option) 方式的利用1、盡量利用多個CP3理器來執(zhí)行事務(wù)處理和查詢CPUB快速發(fā)展使得ORACL越來越重視對多CPU的并行技術(shù)的應(yīng)用,一個數(shù)據(jù)庫的訪問工作可以用多個CPU相互配合來完成,加上分布
14、式計(jì)算已經(jīng)相當(dāng)普遍,只 要可能,應(yīng)該將數(shù)據(jù)庫服務(wù)器和應(yīng)用程序的CPUW求分開,或?qū)PU青求從一個歲務(wù)器移到另一個服務(wù) 器。對于多CPU系統(tǒng)盡量采用Parallel QueryOption(PQO,并行查詢選項(xiàng))方式進(jìn)行數(shù)據(jù)庫操作。2、使用 Parallel Query Option(PQO,并行查詢選擇)方式進(jìn)行數(shù)據(jù)查詢使用PQQT式不僅可以在多個 CPU訶分配SQL語句的 請求處理,當(dāng)所查詢的數(shù)據(jù)處于不同的磁盤時,一個個獨(dú)立的進(jìn)程可以同時進(jìn)行數(shù)據(jù)讀取。3、使用SQL*Loader Direct Path 選項(xiàng)進(jìn)行大量數(shù)據(jù) 裝載使用該方法進(jìn)行數(shù)據(jù)裝載時,程序創(chuàng)建格式化數(shù)據(jù)塊 直接寫入數(shù)據(jù)文件
15、中,不要求數(shù)據(jù)庫內(nèi)核的其他I/O。七、實(shí)施系統(tǒng)資源管理分配計(jì)劃ORACL提供了 Database Resource Manager (DRM,t 據(jù)庫資源管理器)來控制用戶的資源分配,DBAM以用它分配用戶類和作業(yè)類的系統(tǒng)資源百分比。在一個OLD陳統(tǒng)也 可給聯(lián)機(jī)用戶分配 75%勺CPUK源,乘U 下的25麻給批用戶。另外,還可以進(jìn)行 CPU勺多級分 配。除了進(jìn)行CPUIT源分配外,DR皿可以對資源用戶 組執(zhí)行并行操作的限制。八、使用最優(yōu)的數(shù)據(jù)庫連接和 SQL優(yōu)化方案 1、使用直接的OLE D吸據(jù)庫連接方式。通過AD3以使用兩種方式連接數(shù)據(jù)庫,一種是傳統(tǒng) 的ODBg式,一種是 OLE DB方式。
16、ADO建立在 OLE DB技術(shù)上的,為了支持ODBC必須建立相應(yīng)的OLE DB 到ODBC勺調(diào)用轉(zhuǎn)換,而使用直接的 OLE DB方式則不 需轉(zhuǎn)換,從而提高處理速度。2、使用 Connection Pool 機(jī)制在數(shù)據(jù)庫處理中,資源花銷最大的是建立數(shù)據(jù)庫連 接,而且用戶還會有一個較長的連接等待時間。解決 的辦法就是復(fù)用現(xiàn)有的 Connection ,也就是使用Connection Pool 對象機(jī)制。Connection Pool的原理是:IIS+ASP體系中維持了一 個連接緩沖池,這樣,當(dāng)下一個用戶訪問時,直接在 連接緩沖池中取得一個數(shù)據(jù)庫連接,而不需重新連接數(shù)據(jù)庫,因此可以大大地提高系統(tǒng)的響
17、應(yīng)速度。3、高效地進(jìn)行SQL語句設(shè)計(jì)通常情況下,可以采用下面的方法優(yōu)化 SQLM數(shù)據(jù)操 作的表現(xiàn):(1)減少對數(shù)據(jù)庫的查詢次數(shù),即減少對系統(tǒng)資源的 請求,使用快照和顯形圖等分布式數(shù)據(jù)庫對象可以減 少對數(shù)據(jù)庫的查詢次數(shù)。(2)盡量使用相同的或非常類似的 SQL語句進(jìn)行查詢,這樣不僅充分利用SQL共享池中的已經(jīng)分析的語 法樹,要查詢的數(shù)據(jù)在SGA中命中的可能性也會大大 增加。(3)限制動態(tài)SQL的使用,雖然動態(tài)SQL很好用,但是即使在SQL共享池中有一個完全相同的查詢值,動 態(tài)SQLtil會重新進(jìn)行語法分析。(4)避免不帶任何條件的SQ時句的執(zhí)行。沒有任何 條件的SQL吾旬在執(zhí)行時,通常要進(jìn)行 F
18、TS,數(shù)據(jù)庫先 定位一個數(shù)據(jù)塊,然后按順序依次查找其它數(shù)據(jù),對 于大型表這將是一個漫長的過程。(5)如果對有些表中的數(shù)據(jù)有約束,最好在建表的SQL語句用描述完整性來實(shí)現(xiàn),而不是用 SQL程序中實(shí) 現(xiàn)。(6)可以通過取消自動提交模式,將 SQL語句匯集一 組執(zhí)行后集中提交,程序還可以通過顯式地用COMMIT和ROLLBAC進(jìn)行提交和回滾該事務(wù)。(7)檢索大量數(shù)據(jù)時費(fèi)時很長,設(shè)置行預(yù)取數(shù)則能改 善系統(tǒng)的工作表現(xiàn),設(shè)置一個最大值,當(dāng) SQL語句返 回行超過該值,數(shù)值庫暫時停止執(zhí)行,除非用戶發(fā)出新的指令,開始組織并顯示數(shù)據(jù),而不是讓用戶繼續(xù) 等待。九、充分利用數(shù)據(jù)的后臺處理方案減少網(wǎng)絡(luò)流量1、合理創(chuàng)建
19、臨時表或視圖所謂創(chuàng)建臨時表或視圖,就是根據(jù)需要在數(shù)據(jù)庫基礎(chǔ) 上創(chuàng)建新表或視圖,對于多表關(guān)聯(lián)后再查詢信息的可 建新表,對于單表查詢的可創(chuàng)建視圖,這樣可充分利 用數(shù)據(jù)庫的容量大、可擴(kuò)充性強(qiáng)等特點(diǎn),所有條件的 判斷、數(shù)值計(jì)算統(tǒng)計(jì)均可在數(shù)據(jù)庫服務(wù)器后臺統(tǒng)一處 理后追加到臨時表中,形成數(shù)據(jù)結(jié)果的過程可用數(shù)據(jù) 庫的過程或函數(shù)來實(shí)現(xiàn)。2、數(shù)據(jù)庫打包技術(shù)的充分利用利用數(shù)據(jù)庫描述語言編寫數(shù)據(jù)庫的過程或函數(shù),然后 把過程或函數(shù)打成包在數(shù)據(jù)庫后臺統(tǒng)一運(yùn)行包即可。3、數(shù)據(jù)復(fù)制、快照、視圖,遠(yuǎn)程過程調(diào)用技術(shù)的運(yùn)用 數(shù)據(jù)復(fù)制,即將數(shù)據(jù)一次復(fù)制到本地,這樣以后的查 詢就使用本地數(shù)據(jù),但是只適合那些變化不大的數(shù)據(jù)。使用快照也
20、可以在分布式數(shù)據(jù)庫之間動態(tài)復(fù)制數(shù) 據(jù),定義快照的自動刷新時間或手工刷新,以保證數(shù) 據(jù)的引用參照完整性。調(diào)用遠(yuǎn)程過程也會大大減少因 頻繁的SQL吾句調(diào)用而帶來的網(wǎng)絡(luò)擁擠。總之,對所有的性能問題,沒有一個統(tǒng)一的解決方法,但ORACL提供了富的選擇環(huán)境,可以從 ORACLE 數(shù)據(jù)庫的體系結(jié)構(gòu)、軟件結(jié)構(gòu)、模式對象以及具體的 業(yè)務(wù)和技術(shù)實(shí)現(xiàn)出發(fā),進(jìn)行統(tǒng)籌考慮。提高系統(tǒng)性能需要一種系統(tǒng)的整體的方法,在對數(shù)據(jù)庫進(jìn)行優(yōu)化時,應(yīng)對應(yīng)用程序、I/O子系統(tǒng)和操作系統(tǒng)(OS進(jìn)行相應(yīng)的優(yōu)化。優(yōu)化是有目的地更改系統(tǒng)的一個或多個組件,使其滿足一個或多個目標(biāo)的過程。對 Oracle來 說,優(yōu)化是進(jìn)行有目的的調(diào)整組件級以改善性
21、能,即 增加吞吐量,減少響應(yīng)時間。如果DBA能從上述九個方面綜合考慮優(yōu)化方案)相信多數(shù)ORACL應(yīng)用可以做到按最優(yōu)的方式來存取數(shù)據(jù)。我們要做到不但會寫SQL還要做到寫出性能優(yōu)良的SQL以下為筆者學(xué)習(xí)、摘 錄、并匯總部分資料與大家分享!選擇最有效率的表名順序(只在基于規(guī)則的優(yōu)化器中有效):ORACL的解析器按照從右到左的順序處理 FROMf句中的表名,FROMF旬中 寫在最后的表(基礎(chǔ)表driving table) 將被最先處理,在FROMf旬中包含多個表 的情況下,你必須選擇記錄條數(shù)最少的表作為基礎(chǔ)表。如果有 3個以上的表連接查 詢,那就需要選擇交叉表(intersection table)
22、作為基礎(chǔ)表,交叉表是指那個被其 他表所引用的表.WHER&句中的連接順序.:ORACL采用自下而上的順序解析 WHERE旬,根據(jù)這個原理,表之間的連接必 須寫在其他 WHERE件之前,那些可以過濾掉最大數(shù)量記錄的條件必須寫在 WHERE 子旬的末尾.SELECT子句中避免使用 *ORACLEE解析的過程中,會將*依次轉(zhuǎn)換成所有的列名,這個工作是通過 查詢數(shù)據(jù)字典完成的,這意味著將耗費(fèi)更多的時間(4)減少訪問數(shù)據(jù)庫的次數(shù):ORACL在內(nèi)部執(zhí)行了許多工作:解析SQL語句,估算索引的利用率,綁定變 量,讀數(shù)據(jù)塊等;在 SQL*Plus , SQL*Forms 和 Pro*C 中重新設(shè)置 ARRAYS
23、IZE參數(shù),可以增加每次數(shù)據(jù)庫訪問的檢索數(shù)據(jù)量,建議值為200使用DECOD函數(shù)來減少處理時間:使用DECODE數(shù)可以避免重復(fù)掃描相同記錄或重復(fù)連接相同的表.decode (expression, search,result_1)decode (expression, search,result_1, search_2, result_2)decode (expression, search,result_1, search_2, result_2, .,search_n, result_n)decode (expression, search_1, result_1, default)dec
24、ode (expression, search,result_1, search_2, result_2, default)decode (expression, search,result_1, search_2, result_2, .,search n, result n, default) decode函數(shù)比較表達(dá)式和搜索字,如果匹配,返回結(jié)果;如果不匹配,返回 default值;如果未定義default值,則返回空值。以下是一個簡單測試,用于說明Decode函數(shù)的用法:SQL create table t as select username,default_tablespace,l
25、ock_date from dba_users;Table created.SQL select * from t;USERNAME DEFAULT_TABLESPACE LOCK_DATESYS SYSTEMSYSTEM SYSTEMOUTLN SYSTEMCSMIG SYSTEMSCOTT SYSTEMEYGLE USERSDBSNMP SYSTEMWMSYS SYSTEM 20-OCT-048 rows selected.SQL select username,decode(lock_date,null,unlocked,locked) status from t;USERNAME ST
26、ATUSSYS unlockedSYSTEM unlockedOUTLN unlockedCSMIG unlockedSCOTT unlockedEYGLE unlockedDBSNMP unlockedWMSYS locked8 rows selected.SQL select username,decode(lock_date,null,unlocked) status from t; USERNAME STATUSSYS unlockedSYSTEM unlockedOUTLN unlockedCSMIG unlockedSCOTT unlockedEYGLE unlockedDBSNM
27、P unlockedWMSYS8 rows selected.整合簡單,無關(guān)聯(lián)的數(shù)據(jù)庫訪問:如果你有幾個簡單的數(shù)據(jù)庫查詢語句,你可以把它們整合到一個查詢中(即使 它們之間沒有關(guān)系)刪除重復(fù)記錄:最高效的刪除重復(fù)記錄方法(因?yàn)槭褂昧?ROWID)J子:DELETE FROM EMP E WHERE E.ROWID (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO);用 TRUNCATE代 DELETE當(dāng)刪除表中的記錄時,在通常情況下,回滾段(rollback segments ) 用來存 放可以被恢復(fù)的信息.如果你沒有COMMI事
28、務(wù),ORACL會將數(shù)據(jù)恢復(fù)到刪除之前 的狀態(tài)(準(zhǔn)確地說是恢復(fù)到執(zhí)行刪除命令之前的狀況)而當(dāng)運(yùn)用TRUNCATE,回滾 段不再存放任何可被恢復(fù)的信息.當(dāng)命令運(yùn)行后,數(shù)據(jù)不能被恢復(fù).因此很少的資源 被調(diào)用,執(zhí)行時間也會很短.(譯者按:TRUNCATED在刪除全表適用,TRUNCATEI DDL不是 DML)盡量多使用 COMMIT只要有可能,在程序中盡量多使用COMMIT,這樣程序的性能得到提高,需求也 會因?yàn)镃OMMI所釋放的資源而減少:COMMI所釋放的資源:a,回滾段上用于恢復(fù)數(shù)據(jù)的信息.b.被程序語句獲得的鎖redo log buffer 中的空間ORACLE為管理上述3種資源中的內(nèi)部花費(fèi)
29、用 Where子句替換HAVING?旬:避免使用HAVINGF旬,HAVING只會在檢索出所有記錄之后才對結(jié)果集進(jìn)行 過濾,這個處理需要排序,總計(jì)等操作,如果能通過WHERE句限制記錄的數(shù)目,那 就能減少這方面的開銷,(非oracle中)on、where、having這三個都可以加條件 的子句中,on是最先執(zhí)行,where次之,having最后,因?yàn)閛n是先把不符合條件 的記錄過濾后才進(jìn)行統(tǒng)計(jì),它就可以減少中間運(yùn)算要處理的數(shù)據(jù),按理說應(yīng)該速度 是最快的,where也應(yīng)該比having快點(diǎn)的,因?yàn)樗^濾數(shù)據(jù)后才進(jìn)行 sum,在兩個 表聯(lián)接時才用on的,所以在一個表的時候,就剩下 where跟having比較了。在這 單表查詢統(tǒng)計(jì)的情況下,如果要過濾的條件沒有涉及到要計(jì)算字段,那它們的結(jié)果 是一樣的,只是where可以使用rushmore技術(shù),而having就不能,在速度上后者 要慢如果要涉及到計(jì)算的字段,就表示在沒計(jì)算之前,這個字段
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 前臺的辭職報告模板合集七篇
- 迎新年晚會意義策劃
- 2023一年級數(shù)學(xué)上冊 八 認(rèn)識鐘表(小明的一天)教學(xué)實(shí)錄 北師大版
- 2024-2025學(xué)年新教材高中化學(xué) 第五章 化工生產(chǎn)中的重要非金屬元素 1.3 硫酸根離子檢驗(yàn)、硫和含硫化合物的相互轉(zhuǎn)化教學(xué)實(shí)錄 新人教版必修2
- 2024秋八年級道德與法治上冊 第一單元 成長的空間 第一課 相親相愛一家人(他們這樣做的原因)教學(xué)思路 人民版
- 2024年某城市地鐵線路建設(shè)及運(yùn)營管理長期租賃合同
- 實(shí)際正常和標(biāo)準(zhǔn)成本法ActualNormalandStandardCosting
- 廣州市來穗人員服務(wù)管理局來穗人員積分制服務(wù)管理信息系統(tǒng)
- 2022天宮課堂第三課觀后感10篇范文
- 2023二年級數(shù)學(xué)下冊 7 萬以內(nèi)數(shù)的認(rèn)識第8課時 近似數(shù)教學(xué)實(shí)錄 新人教版
- 農(nóng)產(chǎn)品加工與貯藏原理復(fù)習(xí)資料
- (正式版)JBT 5300-2024 工業(yè)用閥門材料 選用指南
- 工藝工程師的成長計(jì)劃書
- 幼兒園大班音樂教案《爆米花》教學(xué)反思
- 家政運(yùn)營方案
- 會展英語教學(xué)大綱
- 行政單位固定資產(chǎn)盤點(diǎn)報告
- 機(jī)電系統(tǒng)綜合調(diào)試方案
- 光學(xué)焦度計(jì)的原理與應(yīng)用
- 分包商質(zhì)量和安全和進(jìn)度管理
- 我不是藥神電影賞析
評論
0/150
提交評論