版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Oracle性能優(yōu)化學習心得一,優(yōu)化總的原那么1,查看系統(tǒng)的利用情形查看SGA分派情形,結(jié)合系統(tǒng)具體情形進行分析。3,表的設(shè)計分析4,SQL語句分析實施要那么1,查看系統(tǒng)的利用情形,CPU占用,內(nèi)存,I/O讀取等OraclelOG提供的OracleEnterpriseManager圖形化工具中的ADDM和SQLTuningAdvisor等能夠方便的查看系統(tǒng)狀況2,OPS上負載均衡,不同查詢用不同Instance3,提供腳本查看SGA利用情形4,分析SQL執(zhí)行情形(trace及其他工具)實施細節(jié)1,外部調(diào)整:咱們應(yīng)該記住Oracle并非是單獨運行的。因此咱們將查看一下通過調(diào)整Oracle效勞器以
2、取得高的性能。2,Rowre-sequencing以減少磁盤I/O:咱們應(yīng)該知道Oracle調(diào)優(yōu)最重要的目標是減少I/O。3,OracleSQL調(diào)整。OracleSQL調(diào)整是Oracle調(diào)整中最重要的領(lǐng)域之一,只要通過一些簡單的SQL調(diào)優(yōu)規(guī)那么就能夠夠大幅度地提升SQL語句的性能,這是一點都不奇怪的。4,調(diào)整Oracle排序:排序關(guān)于Oracle性能也是有專門大阻礙的。5,調(diào)整Oracle的競爭:表和索引的參數(shù)設(shè)置關(guān)于UPDATE和INSERT的性能有專門大的阻礙。二,調(diào)優(yōu)分類:對Oracle數(shù)據(jù)庫進行性能調(diào)整時,應(yīng)當依照必然的順序進行,因為系統(tǒng)在前面步驟中進行的調(diào)整能夠幸免后面的一些沒必要要
3、調(diào)整或代價專門大的調(diào)整。一樣來講能夠從兩個時期入手:一、設(shè)計時期:對其邏輯結(jié)構(gòu)和物理結(jié)構(gòu)進行優(yōu)化設(shè)計,使之在知足需求條件的情形下,系統(tǒng)性能達到最正確,系統(tǒng)開銷達到最?。欢?、數(shù)據(jù)庫運行時期:采取操作系統(tǒng)級、數(shù)據(jù)庫級的一些優(yōu)化方法來使系統(tǒng)性能最正確;設(shè)計時期:數(shù)據(jù)庫設(shè)計優(yōu)化較多修改較少查詢的數(shù)據(jù)和較多查詢較少修改的數(shù)據(jù)別離對待。結(jié)構(gòu)優(yōu)化依照應(yīng)用程序進行數(shù)據(jù)庫設(shè)計。即應(yīng)用程序采納的是傳統(tǒng)的C/S兩層體系結(jié)構(gòu),仍是B/W/D三層體系結(jié)構(gòu)。不同的應(yīng)用程序體系結(jié)構(gòu)要求的數(shù)據(jù)庫資源是不同的。遵循3大范式標準化數(shù)據(jù)結(jié)構(gòu),減少沒必要要的冗余。反標準設(shè)計,增加必要冗余,提高查詢速度。針對轉(zhuǎn)變較少的數(shù)據(jù),合理創(chuàng)建臨
4、時表和視圖,需注意對臨時表和視圖的及時同步更新在效勞器端利用進程和函數(shù),減少網(wǎng)絡(luò)數(shù)據(jù)傳輸I/O優(yōu)化1,利用分區(qū),對查詢條件字段(主外鍵)成立索引,依據(jù)Rowid物理地址查詢,減少I/O的消耗。應(yīng)幸免可能參與計算的字段2,成立適合的索引。缺省情形下成立的索引是非群集索引,但有時它并非是最正確的;合理的索引設(shè)計要成立在對各類查詢的分析和預測上。一樣來講:.有大量重復值、且常常有范圍查詢(between,,=,=)和orderby、groupby發(fā)生的列,可考慮成立群集索引;.常常同時存取多列,且每列都含有重復值可考慮成立組合索引;.組合索引要盡可能使關(guān)鍵查詢形成索引覆蓋,其前導列必然是利用最頻繁的
5、列。按期的重構(gòu)索引是有必要的.ALTERINDEXINDEXNAMEREBUILDTABLESPACENAME幸免在索引列上利用計算,判定或函數(shù)處置3,利用聚簇(對列的選擇原那么同索引)。4,利用存檔功能。數(shù)據(jù)緩沖,快照,視圖,遠程挪用等,減少I/O和網(wǎng)絡(luò)消耗I/O調(diào)整這一步是在信息系統(tǒng)開發(fā)之前完成的。數(shù)據(jù)庫治理員能夠?qū)⒔M成同一個表空間的數(shù)據(jù)文件放在不同的硬盤上,做到硬盤之間I/O負載均衡。在磁盤比較富裕的情形下還應(yīng)該遵循以下原那么:將表和索引分開;制造用戶表空間,與系統(tǒng)表空間(system)分開磁盤;創(chuàng)建表和索引時指定不同的表空間;創(chuàng)建回滾段專用的表空間,避免空間競爭阻礙事務(wù)的完成;創(chuàng)建臨時
6、表空間用于排序操作,盡可能的避免數(shù)據(jù)庫碎片存在于多個表空間中。7,確信數(shù)據(jù)塊大小和存儲參數(shù)。由于數(shù)據(jù)庫的塊大小在數(shù)據(jù)庫創(chuàng)建以后就不能在修改(除非重建數(shù)據(jù)庫),因此為了減少數(shù)據(jù)鏈接和行遷移,又提高磁盤空間的利用率,在設(shè)計數(shù)據(jù)庫時要確信適合的數(shù)據(jù)塊大小和存儲參數(shù)。通常咱們是依照樣例數(shù)據(jù)確信數(shù)據(jù)塊大小,而依照業(yè)務(wù)現(xiàn)狀和以后進展趨勢確信存儲參數(shù)。運行時期:系統(tǒng)優(yōu)化許多新手都錯誤的以為應(yīng)該第一調(diào)整Oracle數(shù)據(jù)庫,而不是先確認外部資源是不是足夠。事實上,若是外部環(huán)境顯現(xiàn)瓶頸,再多的Oracle調(diào)整都是沒有幫忙的。1,多處置器系統(tǒng)調(diào)整優(yōu)化,啟用并行查詢。減少內(nèi)存互換,減少分頁,使SGA(SystemGl
7、obleArea)可留駐內(nèi)存。優(yōu)化系統(tǒng)I/O環(huán)境。4,優(yōu)化網(wǎng)絡(luò)環(huán)境數(shù)據(jù)庫連接與網(wǎng)絡(luò)優(yōu)化1,利用直接OLEDB連接。2,利用ConnectionPool(數(shù)據(jù)連接池)機制3,優(yōu)化程序設(shè)計,減少網(wǎng)絡(luò)傳輸量Oracle參數(shù)配置優(yōu)化Oracle參數(shù)設(shè)置,依照具體應(yīng)用情形而定。1,SGA的分派及利用效率優(yōu)化分派給每一個實例的內(nèi)存,即SGA的利用效率如何,會大大阻礙數(shù)據(jù)庫系統(tǒng)的性能。SGA由以下部份組成:共享池(Sharedpool)、數(shù)據(jù)塊緩沖區(qū)(Dbblockbuffer)、重做日記緩沖區(qū)(Logbuffer)、大池組成(Largepool)。2,利用SQL*LoaderDirectPath選項進行大
8、量數(shù)據(jù)裝載3,DatabaseResourceManager(DRM,數(shù)據(jù)庫資源治理器)來操縱用戶的資源分派4,減少資源競爭在Oracle中,需要采納一些機制來保證數(shù)據(jù)庫對象在利用期間的穩(wěn)固性和數(shù)據(jù)的一致性,如利用鎖存器(latch)、鎖(lock)等。因此爭用和這些機制相關(guān)的資源會阻礙數(shù)據(jù)庫的性能。為了減少這種資源競爭,能夠通過調(diào)整數(shù)據(jù)庫的相關(guān)初始化參數(shù)(如db_block_lru_latches、dml_locks)來減少資源的爭用,優(yōu)化數(shù)據(jù)庫性能。在對Oracle數(shù)據(jù)庫進行優(yōu)化時,需要用到許多的參數(shù),其中有一部份參數(shù)對系統(tǒng)性能阻礙較大,這部份參數(shù)叫可變參數(shù)??勺儏?shù)按其作用能夠分為兩大類
9、,一大類是起限制作用的,如OPEN_CURSORS;另一大類是阻礙系統(tǒng)性能的,如DB_BLOCK_BUFFERS。5,可變參數(shù)優(yōu)化在對Oracle數(shù)據(jù)庫進行優(yōu)化時,需要用到許多的參數(shù),其中有一部份參數(shù)對系統(tǒng)性能阻礙較大,這部份參數(shù)叫可變參數(shù)??勺儏?shù)按其作用能夠分為兩大類,一大類是起限制作用的,如OPEN_CURSORS;另一大類是阻礙系統(tǒng)性能的,如DB_BLOCK_BUFFERS。在進行數(shù)據(jù)庫系統(tǒng)性能優(yōu)化時,需要熟練把握和了解一些可變參數(shù)。本文討論了一些對系統(tǒng)性能有較大阻礙的參數(shù)。限制類可變參數(shù)DML_LOCKS該參數(shù)說明多少個用戶,可同時能修改多少張表。例如:有三個用戶同時修改二張表,那么
10、要求表上的總數(shù)為6。假設(shè)置為0,那么組織隊列不起作用,其性能會稍有提高。利用該參數(shù)時不能用DROPTABLE、CREATEINDEX或顯式封鎖。LICENSE_MAX_SESSION該參數(shù)指出許諾并發(fā)用戶會話的最大數(shù)。假設(shè)此參數(shù)為0,那么不能實施并發(fā)。假設(shè)并發(fā)的用戶會話數(shù)已達到此極限,那么只有具有RESTRICTEDSESSION權(quán)限的用戶才能連接到效勞器。LICENSE_MAX_USERS該參數(shù)指出在一個數(shù)據(jù)庫上可成立的最大用戶數(shù)。當達到最大值時,便不能再建新用戶,可改變此值以放松限制。在LICENSE_MAX_SESSION或LICENSE_MAX_USER為0時,那么并發(fā)會話或任何用戶都
11、不能用。假設(shè)對不同的實例,此參數(shù)不同時,那么以第一個登錄的數(shù)據(jù)庫實例的參數(shù)為準。MAX_DUMP_FILE_SIZE該參數(shù)指定操作系統(tǒng)中寫跟蹤文件的塊的最大值。可用此值來限制跟蹤文件的空間。OPEN_CURSORS該參數(shù)指明一個用戶進程能同時打開光標的最大數(shù),它能限制每一個用戶進程占用的內(nèi)存空間量。OPEN_LINKS該參數(shù)指定并發(fā)連接到遠程數(shù)據(jù)庫的最大用戶進程數(shù)。假設(shè)同時引用多個數(shù)據(jù)庫,那么應(yīng)該增大該值。例如:同時交替訪問A、B和C三個數(shù)據(jù)庫時,假設(shè)OPEN_LINKS設(shè)置為2,那么需花費等待連接時刻。此參數(shù)只用于散布事務(wù)。假設(shè)該參數(shù)設(shè)置為0,那么不許諾進行散布事務(wù)處置。PROCESS該參數(shù)
12、指定同時連接到Oracle效勞器上的最大用戶進程數(shù)。該參數(shù)值包括6個后臺進程和一個登錄,因此,該參數(shù)值為20,那么只能有13或14個并發(fā)用戶連接到效勞器。ROW_LOCKING該參數(shù)指定行封鎖方式。假設(shè)設(shè)置為“ALWAYS”,那么在修改表時只實實施封鎖。假設(shè)設(shè)置為“INTENT”時,那么行封鎖只適用于SELECTFORUPDATE,而在修改時實施表封鎖。阻礙系統(tǒng)性能類可變參數(shù)CHECKPOINT_PROCESS該參數(shù)依照是不是要求檢查點而設(shè)置成TRUE或FALSE。當所有緩沖區(qū)的信息寫到磁盤時,檢查點進程(CHPT)成立一個靜態(tài)的點。在歸檔日記文件中做一個記號表示有一個檢查點發(fā)生。檢查點發(fā)生在
13、歸檔日記轉(zhuǎn)換的時候或當達到log_checkpoint_interval概念的塊數(shù)的時候。當設(shè)置此參數(shù)為TRUE時,后臺進程CHPT即可工作。在檢查點期間內(nèi),假設(shè)日記寫進程(LGWR)的性能減低,那么可用CHPT進程加以改善。DB_BLOCK_CHECKPOINT_BATCH該參數(shù)的值設(shè)置得較大時,可加速檢查點的完成。當指定的值比參數(shù)DB_BLOCK_CHECKPOINT_BATCH大時,其成效和指定最大值相同。DB_BLOCK_BUFFERS該參數(shù)是在SGA中可作緩沖用的數(shù)據(jù)庫塊數(shù)。該參數(shù)決定SGA的大小,對數(shù)據(jù)庫性能具有決定性因素。假設(shè)取較大的值,那么可減少I/O次數(shù),但要求內(nèi)存空間較大。
14、每一個緩沖區(qū)的大小由參數(shù)DB_BLOCK_SIZE決定。DB_BLOCK_SIZE該參數(shù)表示Oracle數(shù)據(jù)庫塊的大小,以字節(jié)為單位,典型值為2048或4096。該值一旦設(shè)定那么不能改變。它阻礙表及索引的FREELISTS參數(shù)的最大值。DB_FILES該參數(shù)為數(shù)據(jù)庫運行時可打開的數(shù)據(jù)文件最大數(shù)量。DB_FILE_MULTIBLOCK_READ_COUNT該參數(shù)表示在順序掃描時一次I/O操作可讀的最大塊數(shù),該最大塊數(shù)取決于操作系統(tǒng),其值在4至16或32是比較好。D1SCRETE_TRANSACTION_ENABLED該參數(shù)實現(xiàn)一個更簡單、更快的回滾機制,以改良某些事務(wù)類型的性能。當設(shè)置為TRUE
15、時,可改善某些類型的事務(wù)性能。LOG_ARCHIVE_BUFFER_SIZE此參數(shù)的值依托于操作系統(tǒng),它與LOG_ARCHIVE_BUFFER參數(shù)一路用于調(diào)整有歸檔日記的運行,使其運行速度盡可能加速,但不能快到降低性能。僅當直接歸檔到磁帶設(shè)備時才需要增加這些參數(shù)的值,重做日記緩沖區(qū)要等待歸檔日記緩沖區(qū)變得可用。LOG_ARCHIVE_BUFFER該參數(shù)指定用于歸檔的日記時的緩沖區(qū)數(shù)。LOG_BUFFER該參數(shù)指明分派給SGA中的日記緩沖區(qū)的字節(jié)數(shù),該參數(shù)值較大時,可減少日記I/O的次數(shù)。關(guān)于忙碌的系統(tǒng)不宜采納大于或等于64K的值。缺省值一般為數(shù)據(jù)庫塊的4倍。LOG_CHECKPOINT_TIM
16、EOUT該參數(shù)指明兩個檢查點之間的時刻距離,假設(shè)指定為0時,那么說明不許諾進行基于時刻的檢查點。LOG_CHECKPOINT_INTERVAL該參數(shù)用來確信檢查點進程的執(zhí)行頻率。那個數(shù)值設(shè)置成取檢查點之前處置的重做緩沖區(qū)塊的數(shù)量。LOG_FILES該參數(shù)指定運行期間數(shù)據(jù)庫可打開的日記文件數(shù)。假設(shè)需要較大的SGA空間,而不需多個日記文件,那么可減少該值。LOG_SIMULTANEOUS_COPIES該參數(shù)是日記緩沖區(qū)副本閂鎖的最大數(shù),為同時寫日記項所用。為提高性能,可設(shè)置此參數(shù)為兩倍的CPU數(shù),對單進程系統(tǒng),該值多數(shù)設(shè)置為0,現(xiàn)在斷開閂鎖。LOG_SMALL_ENTRY_MAX_SIZE該參數(shù)與
17、LOG_SIMULTANEOUS_COPIES參數(shù)配合利用。假設(shè)日記項大于此項,那么在給緩沖區(qū)分派空間并取得日記復制閂鎖以后,用戶進程釋放日記復制閂鎖。OPTIMIZRER_MODE假設(shè)該參數(shù)的值為RULE,那么ORACLE優(yōu)化器選擇基于規(guī)那么的優(yōu)化;假設(shè)設(shè)置為COST,而且在數(shù)據(jù)字典中存在有統(tǒng)計信息,那么優(yōu)化器選擇基于代價的優(yōu)化方式進行優(yōu)化。SEQUENCE_CACHE_ENTRIES該參數(shù)指明在SGA中可進行高速緩存的序列數(shù),用于直接存取。該高速緩存區(qū)是基于最近最少利用(LRU)的算法進行治理的。假設(shè)此值設(shè)置得較高,那么可達到較高的并發(fā)性。SEQUENCE_CACHE_HASH_BUCKE
18、TS該參數(shù)用于加速查看高速緩沖區(qū)最近請求的最新序列的桶式地址數(shù),每一個桶式地址占8個字節(jié)。高速緩沖區(qū)以散列表排列,該參數(shù)應(yīng)為質(zhì)數(shù)。SERIALIZEABLE此參數(shù)用于保證重復讀的一致性。當它設(shè)置為TRUE時,查詢可保證表級讀一致,以避免在此查詢提交之前的修改。SHARED_POOL_SIZE該參數(shù)指定共享池的大小,其中包括共享光標及存儲進程。在多用戶系統(tǒng)中,較大的SHARED_POOL_SIZE值可改善SQL語句的執(zhí)行性能,但較小的值可節(jié)省內(nèi)存。SMALL_TABLE_THRESHOLD該參數(shù)決定SGA頂用于掃描的緩沖區(qū)的數(shù)量,假設(shè)表的數(shù)量小于該值,那么該表可整個地讀入高速緩存區(qū)。假設(shè)表大于該
19、值,那么當即重用該緩沖區(qū)。一樣用缺省值可使性能最好。SORT_AREA_TETAINED_SIZE這是會話內(nèi)存的最大數(shù)量,用于內(nèi)存排序。當從排序空間提出最后行時,便釋放該內(nèi)存。假設(shè)排序要較大的內(nèi)存,那么分派一臨時段,排序即可在盤上進行。用于排序的最大總量可由SORT_AREA_SIZE指定,而不用此參數(shù)。能夠分派一樣大小的多個排序空間,只是一樣關(guān)于復雜的查詢才需要。SORT_AREA_SIZE該參數(shù)用于指定進行外排序(磁盤)時所需PGA內(nèi)存的最大數(shù)量,以字節(jié)為單位。當排序行寫入磁盤時,該內(nèi)存被釋放。增大該參數(shù)的值,可改良排序效率。一樣不調(diào)整該參數(shù),除非排序量專門大時才調(diào)整。SORT_SPACE
20、MP_SIZE該參數(shù)僅在排序量專門大時才調(diào)整該參數(shù)??捎孟率皆O(shè)置該參數(shù),使排序能最正確地利用盤空間:(total_sort_bytes)/(SORT_AREA_SIZE)十64其中,total_sortjbytes為:(number_of_records)*sum_of_aver_average_column_sizes+(12*numberof(al)SQLTRACE該參數(shù)設(shè)置為TRUE時,即可跟蹤,以取得改善性能的信息。因為跟蹤會增加開銷,因此一樣僅在搜集信息時才置為TRUE。在實際利歷時,可用ALTERSESSION命令覆蓋它。TRANSACTION該參數(shù)設(shè)置并發(fā)事務(wù)的最大數(shù)。假設(shè)此值較
21、大,那么需增加SGA空間和分派的回滾段數(shù)量。缺省值大于PROCESS時,可許諾遞歸事務(wù)。E,SQL語句優(yōu)化不良的SQL往往來自于不適當?shù)乃饕O(shè)計、不充分的連接條件和未優(yōu)化的where子句。SQL優(yōu)化的實質(zhì)確實是在結(jié)果正確的前提下,用優(yōu)化器能夠識別的語句,充份利用索引,減少表掃描的I/O次數(shù),盡可能幸免表搜索的發(fā)生。1,選用適合的Oracle優(yōu)化器2,訪問Table的方式:全表掃描,順率訪問全數(shù)表的數(shù)據(jù),依次讀取多個物理數(shù)據(jù)塊。ROWID掃描,基于記錄的物理位置信息進行掃描和檢索,索引提供了快速訪問ROWID的方式。3,共享SQL語句不重復解析相同的SQL語句。當你執(zhí)行一個SQL語句(有時被稱為
22、一個游標)時,若是它和之前的執(zhí)行過的語句完全相同,ORACLE就能夠?qū)iT快取得已經(jīng)被解析的語句和最好的執(zhí)行途徑共享的語句必需知足三個條件:字符級的比較當前被執(zhí)行的語句和共享池中的語句必需完全相同.例如:SELECT*FROMTEST;和以下每一個都不同,字母大小寫和空格SELECT*fromTEST;Select*FromTEST;SELECT*FROMTEST;兩個語句所指的對象必需完全相同:例如:用戶對象名如何訪問Jacksal_limitprivatesynonymWork_citypublicsynonymPlant_detailpublicsynonymJillsal_limitpr
23、ivatesynonymWork_citypublicsynonymPlant_detailtableowner考慮一下以下SQL語句可否在這兩個用戶之間共享.SQL能否共享原因每個用戶都有一個privatesynonymselectcount(*0fromwork_citywheresdesclikeNEW%;能兩個用戶訪問相同的對象publicsynonymwork_city不能用戶jack通過privatesynonym訪問plant_detail而jill是表的所有者,對象不同.不能selectmax(sal_cap)fromsal_limit;-sal_limit,它們是不同的對象兩
24、個SQL語句中必需利用相同的名字的綁定變量(bindvariables)C.例如:第一組的兩個SQL語句是相同的(能夠共享),而第二組中的兩個語句是不同的(即便在運行時,賦于不同的綁定變量相同的值)a.selectpin,namefrompeoplewherepin=:blk1.pin;selectpin,namefrompeoplewherepin=:blk1.pin;b.selectpin,namefrompeoplewherepin=;selectpin,namefrompeoplewherepin=;4,選擇最正確查詢順序(表名順序)tabl表記錄多,tab2表記錄少Selectcou
25、nt(*)fromtabl,tab2;tab2表作為基礎(chǔ)表多表連接查詢,以其中涉及多張表的關(guān)系表為基礎(chǔ)表5,Where子句的條件連接順序(從最后一個條件子句開始解析)SELECT*FROMtesttlWHERE2550000ANDJOB=MANAGER大量減少查詢范圍的條件放在最后6,幸免select*全查詢,利用條件縮小查詢范圍selectaddressfromaddresswhereupper(name)likeJOHNAND(namelikeJO%ornamelikejo%ornamelikeJoornamelikejO);注意:upper()函數(shù)對索引字段數(shù)據(jù)的修改,引發(fā)了非索引的全檢
26、索。加入對索引列的額外條件那么可強制啟用索引,提高查詢效率。7,減少訪問數(shù)據(jù)庫的次數(shù)能1次select得出結(jié)果的,盡可能幸免用2次select8,利用Decode函數(shù)來減少處置時刻利用DECODE函數(shù)能夠幸免重復掃描相同記錄或重復連接相同的表例如:SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0020ANDENAMELIKESMITH%;SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0030ANDENAMELIKESMITH%;你能夠用DECODE函數(shù)高效地取得相同結(jié)果SELECTCOUNT(DECODE(DEPT
27、_NO,0020,X,NULL)D0020_COUNT,COUNT(DECODE(DEPT_NO,0030,X,NULL)D0030_COUNT,SUM(DECODE(DEPT_NO,0020,SAL,NULL)D0020_SAL,SUM(DECODE(DEPT_NO,0030,SAL,NULL)D0030_SALFROMEMPWHEREENAMELIKESMITH%;類似的,DECODE函數(shù)也能夠運用于GROUPBY和ORDERBY子句中.9,整合簡單的,無關(guān)聯(lián)的數(shù)據(jù)庫訪問視程序代碼要求,能夠把簡單的查詢,能夠把無關(guān)聯(lián)的幾個表在一次select查詢出來,貯存起來待用。10,刪除重復記錄DEL
28、ETEFROMtesttWHEREt.ROWID(SELECTMIN(X.ROWID)FROMtestXWHEREX.id=);因為利用了ROWID,是最高效刪除。11,用Truncate替代delete不可回滾,提高了執(zhí)行速度。12,盡可能多用CommitCOMMIT所釋放的資源:回滾段上用于恢復數(shù)據(jù)的信息.被程序語句取得的鎖redologbuffer中的空間ORACLE為治理上述3種資源中的內(nèi)部花費具體何時COMMIT,需要考慮事務(wù)完整性。13,計算記錄條數(shù)count(XX)對索引列執(zhí)行count效率最高14,用where代替havingHAVING只會在檢索出所有記錄以后才對結(jié)果集進行過
29、濾.那個處置需要排序,共計等操作.若是能通過WHERE子句限制記錄的數(shù)量,那就能夠減少這方面的開銷.15,減少對表的查詢在含有子查詢的SQL語句中,要專門注意減少對表的查詢.例如:低效SELECTTAB_NAMEFROMTABLESWHERETAB_NAME=(SELECTTAB_NAMEFROMTAB_COLUMNSWHEREVERSION=604)ANDDB_VER=(SELECTDB_VERFROMTAB_COLUMNSWHEREVERSION=604)高效SELECTTAB_NAMEFROMTABLESWHERE(TAB_NAME,DB_VER)=(SELECTTAB_NAME,DB_
30、VER)FROMTAB_COLUMNSWHEREVERSION=604)Update多個Column例子:低效:UPDATEEMPSETEMP_CAT=(SELECTMAX(CATEGORY)FROMEMP_CATEGORIES),SAL_RANGE=(SELECTMAX(SAL_RANGE)FROMEMP_CATEGORIES)WHEREEMP_DEPT=0020;高效:UPDATEEMPSET(EMP_CAT,SAL_RANGE)=(SELECTMAX(CATEGORY),MAX(SAL_RANGE)FROMEMP_CATEGORIES)WHEREEMP_DEPT=0020;16,通過內(nèi)部
31、函數(shù)提高SQL效率利用函數(shù)處置邏輯比復雜SQL效率要高。17,利用表的別名幸免多表連接時,存在多個相同列名致使的錯誤和效率降低。用Exists代替In在許多基于基礎(chǔ)表的查詢中,為了知足一個條件,往往需要對另一個表進行聯(lián)接.在這種情形下,利用EXISTS(或NOTEXISTS)通常將提高查詢的效率用NotExists代替NotIn在子查詢中,NOTIN子句將執(zhí)行一個內(nèi)部的排序和歸并.不管在哪一種情形下,NOTIN都是最低效的(因為它對子查詢中的表執(zhí)行了一個全表遍歷).為了幸免利用NOTIN,咱們能夠把它改寫成外連接(OuterJoins)或NOTEXISTS.用表連接代替ExistsSELECT
32、ENAMEFROMEMPEWHEREEXISTS(SELECTXFROMDEPTANDDEPT_CAT=A);(更高效)SELECTENAMEFROMDEPTD,EMPEANDDEPT_CAT=A;21,用EXISTS替換DISTINCT當提交一個包括一對多表信息(比如部門表和雇員表)的查詢時,幸免在SELECT子句中利用DISTINCT.一樣能夠考慮用EXIST替換例如:低效:SELECTDISTINCTDEPT_NO,DEPT_NAMEFROMDEPTD,EMPE高效:SELECTDEPT_NO,DEPT_NAMEFROMDEPTDWHEREEXISTS(SELECTXFROMEMPEWHEREE.DEPT_NO=D.DEPT_NO);EXISTS使查詢更為迅速,因為RDBMS核心模塊將在子查詢的條件一旦知足后,立刻返回結(jié)果.22,用=替代若是DEPTNO上有一個索引,高效:SELECT*FROMEMPWHEREDEPTNO=4低效:SELECT*FROMEMPWHEREDEPTNO3二者的區(qū)別在于,前者DBMS將直接跳到第一個DEPT等于4的記錄而后者將第必然位到DEPTNO=3的記錄而且向前掃描到第一個DEPT大于3的記錄.23,用IN來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026云南昆明金岸中學招聘21人考試備考題庫及答案解析
- 2026河南省科學院物理研究所招聘筆試模擬試題及答案解析
- 新疆醫(yī)科大學2025年高層次人才引進參考題庫附答案解析
- 培訓班前臺考核制度
- 旅行社安全培訓教育制度
- 培訓大廈安全制度
- 兼職培訓師獎勵制度
- 食堂聘用培訓制度
- 培訓行業(yè)銷售薪資制度
- 三基培訓制度與流程
- 中國藥物性肝損傷診治指南(2024年版)解讀
- 基層黨建知識測試題及答案
- DG-TJ08-2021-2025 干混砌筑砂漿抗壓強度現(xiàn)場檢測技術(shù)標準
- 鼻竇炎的護理講課課件
- 腸系膜脂膜炎CT診斷
- 體外膜肺氧合技術(shù)ECMO培訓課件
- 老年醫(yī)院重點??平ㄔO(shè)方案
- 銀行解封協(xié)議書模板
- 超星爾雅學習通《學術(shù)規(guī)范與學術(shù)倫理(華東師范大學)》2025章節(jié)測試附答案
- GB 17440-2025糧食加工、儲運系統(tǒng)粉塵防爆安全規(guī)范
- 《綠色農(nóng)產(chǎn)品認證》課件
評論
0/150
提交評論