freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

oracle-sql優(yōu)化-在線瀏覽

2025-08-10 19:08本頁(yè)面
  

【正文】 TABLESWHERE TAB_NAME = ( SELECT TAB_NAMEFROM TAB_COLUMNSWHERE VERSION = 604)AND DB_VER= ( SELECT DB_VERFROM TAB_COLUMNSWHERE VERSION = 604) 高效SELECT TAB_NAMEFROM TABLESWHERE (TAB_NAME,DB_VER)= ( SELECT TAB_NAME,DB_VER)FROM TAB_COLUMNSWHERE VERSION = 604) Update 多個(gè)Column 例子:低效:UPDATE EMPSET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES),SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES)WHERE EMP_DEPT = 0020。 16. 通過(guò)內(nèi)部函數(shù)提高SQL效率. SELECT ,COUNT(*)FROM HISTORY_TYPE T,EMP E,EMP_HISTORY HWHERE = AND = GROUP BY ,。CURSOR C1 ISSELECT TYPE_DESCFROM HISTORY_TYPEWHERE HIST_TYPE = TYP。FETCH C1 INTO TDESC。RETURN (NVL(TDESC,’?’))。 FUNCTION LOOKUP_EMP(EMP IN NUMBER) RETURN VARCHAR2ASENAME VARCHAR2(30)。BEGINOPEN C1。CLOSE C1。END。 ORACLE SQL性能優(yōu)化系列 (六) 20. 用表連接替換EXISTS通常來(lái)說(shuō) , 采用表連接的方式比EXISTS更有效率SELECT ENAMEFROM EMP EWHERE EXISTS (SELECT ‘X’FROM DEPTWHERE DEPT_NO = AND DEPT_CAT = ‘A’)。 21. 用EXISTS替換DISTINCT當(dāng)提交一個(gè)包含一對(duì)多表信息(比如部門(mén)表和雇員表)的查詢(xún)時(shí),避免在SELECT子句中使用DISTINCT. 一般可以考慮用EXIST替換 例如:低效:SELECT DISTINCT DEPT_NO,DEPT_NAMEFROM DEPT D,EMP EWHERE = 高效:SELECT DEPT_NO,DEPT_NAMEFROM DEPT DWHERE EXISTS ( SELECT ‘X’FROM EMP EWHERE = )。 (譯者按: 雖然目前各種關(guān)于SQL優(yōu)化的圖形化工具層出不窮,但是寫(xiě)出自己的SQL工具來(lái)解決問(wèn)題始終是一個(gè)最好的方法) 23. 使用TKPROF 工具來(lái)查詢(xún)SQL性能狀態(tài) SQL trace 工具收集正在執(zhí)行的SQL的性能狀態(tài)數(shù)據(jù)并記錄到一個(gè)跟蹤文件中. 這個(gè)跟蹤文件提供了許多有用的信息,. 本篇文章來(lái)源于:開(kāi)發(fā)學(xué)院 原文鏈接:設(shè)置SQL TRACE在會(huì)話級(jí)別: 有效 ALTER SESSION SET SQL_TRACE TRUE 設(shè)置SQL TRACE 在整個(gè)數(shù)據(jù)庫(kù)有效仿, , USER_DUMP_DEST參數(shù)說(shuō)明了生成跟蹤文件的目錄ORACLE SQL性能優(yōu)化系列 (七 ) 24. 用EXPLAIN PLAN 分析SQL語(yǔ)句 EXPLAIN PLAN 是一個(gè)很好的分析SQL語(yǔ)句的工具,它甚至可以在不執(zhí)行SQL的情況下分析語(yǔ)句. 通過(guò)分析,我們就可以知道ORACLE是怎么樣連接表,使用什么方式掃描表(索引掃描或全表掃描)以及使用到的索引名稱(chēng).你需要按照從里到外,從上到下的次序解讀分析的結(jié)果. EXPLAIN PLAN分析的結(jié)果是用縮進(jìn)的格式排列的, 最內(nèi)部的操作將被最先解讀, 如果兩個(gè)操作處于同一層中,帶有最小操作號(hào)的將被首先執(zhí)行.NESTED LOOP是少數(shù)不按照上述規(guī)則處理的操作, 正確的執(zhí)行路徑是檢查對(duì)NESTED LOOP提供數(shù)據(jù)的操作,其中操作號(hào)最小的將被最先處理. 譯者按: 通過(guò)實(shí)踐, 感到還是用SQLPLUS中的SET TRACE 功能比較方便.舉例: SQL list1 SELECT *2 FROM dept, emp3* WHERE = SQL set autotrace on exp。SQL /14 rows selected.Execution Plan0 SELECT STATEMENT Optimizer=CHOOSE1 0 NESTED LOOPS2 1 TABLE ACCESS (FULL) OF 39。3 1 TABLE ACCESS (BY INDEX ROWID) OF 39。4 3 INDEX (UNIQUE SCAN) OF 39。 (UNIQUE) Statistics0 recursive calls2 db block gets30 consistent gets0 physical reads0 redo size2598 bytes sent via SQL*Net to client503 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)14 rows processed 通過(guò)以上分析,可以得出實(shí)際的執(zhí)行步驟是:1. TABLE ACCESS (FULL) OF 39。2. INDEX (UNIQUE SCAN) OF 39。 (UNIQUE)3. TABLE ACCESS (BY INDEX ROWID) OF 39。4. NESTED LOOPS (JOINING 1 AND 3) ORACLE SQL性能優(yōu)化系列 (八) 25. 用索引提高效率 索引是表的一個(gè)概念部分,用來(lái)提高檢索數(shù)據(jù)的效率. 實(shí)際上,ORACLE使用了一個(gè)復(fù)雜的自平衡Btree結(jié)構(gòu). 通常,通過(guò)索引查詢(xún)數(shù)據(jù)比全表掃描要快. 當(dāng)ORACLE找出執(zhí)行查詢(xún)和Update語(yǔ)句的最佳路徑時(shí), ORACLE優(yōu)化器將使用索引. 同樣在聯(lián)結(jié)多個(gè)表時(shí)使用索引也可以提高效率. 另一個(gè)使用索引的好處是,它提供了主鍵(primary key)的唯一性驗(yàn)證.除了那些LONG或LONG RAW數(shù)據(jù)類(lèi)型, 你可以索引幾乎所有的列. 通常, 在大型表中使用索引特別有效. 當(dāng)然,你也會(huì)發(fā)現(xiàn), 在掃描小表時(shí),使用索引同樣能提高效率.雖然使用索引能得到查詢(xún)效率的提高,但是我們也必須注意到它的代價(jià). 索引需要空間來(lái)存儲(chǔ),也需要定期維護(hù), 每當(dāng)有記錄在表中增減或索引列被修改時(shí), 索引本身也會(huì)被修改. 這意味著每條記錄的INSERT , DELETE , UPDATE將為此多付出4 , 5 次的磁盤(pán)I/O . 因?yàn)樗饕枰~外的存儲(chǔ)空間和處理,那些不必要的索引反而會(huì)使查詢(xún)反應(yīng)時(shí)間變慢.譯者按:定期的重構(gòu)索引是有必要的.ALTER INDEX INDEXNAME REBUILD TABLESPACENAME 26. 索引的操作ORACLE對(duì)索引有兩種訪問(wèn)模式. 索引唯一掃描 ( INDEX UNIQUE SCAN) 大多數(shù)情況下, 優(yōu)化器通過(guò)WHERE子句訪問(wèn)INDEX. 例如:表LODGING有兩個(gè)索引 : 建立在LODGING列上的唯一性索引LODGING_PK和建立在MANAGER列上的非唯一性索引LODGING$MANAGER. SELECT *FROM LODGINGWHERE LODGING = ‘ROSE HILL’。 索引范圍查詢(xún)(INDEX RANGE SCAN)適用于兩種情況:1. 基于一個(gè)范圍的檢索2. 基于非唯一性索引的檢索 例1: SELECT LODGINGFROM LODGINGWHERE LODGING LIKE ‘M%’。 這個(gè)SQL的執(zhí)行分兩步, LODGING$MANAGER的索引范圍查詢(xún)(得到所有符合條件記錄的ROWID) 和下一步同過(guò)ROWID訪問(wèn)表得到LODGING列的值. 由于LODGING$MANAGER是一個(gè)非唯一性的索引,數(shù)據(jù)庫(kù)不能對(duì)它執(zhí)行索引唯一掃描. 本篇文章來(lái)源于:開(kāi)發(fā)學(xué)院 原文鏈接:ORACLE SQL性能優(yōu)化系列 (一)amp。 由于SQL返回LODGING列,而它并不存在于LODGING$MANAGER索引中, 所以在索引范圍查詢(xún)后會(huì)執(zhí)行一個(gè)通過(guò)ROWID訪問(wèn)表的操作. WHERE子句中, 如果索引列所對(duì)應(yīng)的值的第一個(gè)字符由通配符(WILDCARD)開(kāi)始, 索引將不被采用. SELECT LODGINGFROM LODGINGWHERE MANAGER LIKE ‘%HANMAN’。由于LODGING表的LODING列上有一個(gè)索引, 而且WORKER表中沒(méi)有相比較的索引, WORKER表將被作為查詢(xún)中的基礎(chǔ)表. 28. 多個(gè)平等的索引當(dāng)SQL語(yǔ)句的執(zhí)行路徑可以使用分布在多個(gè)表上的多個(gè)索引時(shí), ORACLE會(huì)同時(shí)使用多個(gè)索引并在運(yùn)行時(shí)對(duì)它們的記錄進(jìn)行合并, 檢索出僅對(duì)全部索引有效的記錄.在ORACLE選擇執(zhí)行路徑時(shí),唯一性索引的等級(jí)高于非唯一性索引. 然而這個(gè)規(guī)則只有. 這種子句在優(yōu)化器中的等級(jí)是非常低的.如果不同表中兩個(gè)想同等級(jí)的索引將被引用, FROM子句中表的順序?qū)Q定哪個(gè)會(huì)被率先使用. FROM子句中最后的表的索引將有最高的優(yōu)先級(jí).如果相同表中兩個(gè)想同等級(jí)的索引將被引用, WHERE子句中最先被引用的索引將有最高的優(yōu)先級(jí).舉例:DEPTNO上有一個(gè)非唯一性索引,EMP_CAT也有一個(gè)非唯一性索引.SELECT ENAME,FROM EMPWHERE DEPT_NO = 20AND EMP_CAT = ‘A’。 這里只有EMP_CAT索引被用到,然后所有的記錄將逐條與DEPTNO條件進(jìn)行比較. 執(zhí)行路徑如下:TABLE ACCESS BY ROWID ON EMPINDEX RANGE SCAN ON CAT_IDX 30. 不明確的索引等級(jí) 當(dāng)ORACLE無(wú)法判斷索引的等級(jí)高低差別,優(yōu)化器將只使用一個(gè)索引,它就是在WHERE子句中被列在最前面的.舉例:DEPTNO上有一個(gè)非唯一性索引,EMP_CAT也有一個(gè)非唯一性索引. SELECT ENAMEFROM EMPWHERE DEPTNO 20AND EMP_CAT ‘A’。EMP39。A39。 no rows selected Execution Plan0 SELECT STATEMENT Optimizer=CHOOSE1 0 TABLE ACCESS (BY INDEX ROWID) OF 39。2 1 INDEX (RANGE SCAN) OF 39。 (NONUNIQUE) 雖然EMPNO是唯一性索引,但是由于它所做的是范圍比較, 等級(jí)要比非唯一性索引的等式比較低!ORACLE SQL性能優(yōu)化系列 (十) 31. 強(qiáng)制索引失效 如果兩個(gè)或以上索引具有相同的等級(jí),你可以強(qiáng)制命令ORACLE優(yōu)化器使用其中的一個(gè)(通過(guò)它,檢索出的記錄數(shù)量少) . 舉例: SELECT ENAMEFROM EMPWHERE EMPNO = 7935AND DEPTNO + 0 = 10 /*DEPTNO上的索引將失效*/AND EMP_TYPE || ‘’ = ‘A’ /*EMP_TYPE上的索引將失效*/ 這是一種相當(dāng)直接的提高查詢(xún)效率的辦法. 但是你必須謹(jǐn)慎考慮這種策略,一般來(lái)說(shuō),只有在你希望單獨(dú)優(yōu)化幾個(gè)SQL時(shí)才能采用它. 這里有一個(gè)例子關(guān)于何時(shí)采用這種策略, 假設(shè)在EMP表的EMP_TYPE列上有一個(gè)非唯一性的索引而EMP_CLASS上沒(méi)有索引. SELECT ENAMEFROM EMPWHERE EMP_TYPE = ‘A’AND EMP_CLASS = ‘X’。nbsp。 32. 避免在索引列上使用計(jì)算.WHERE子句中,如果索引列是函數(shù)的一部分.優(yōu)化器將不使用索引而使用全表掃描. 舉例: 低效:SELECT …FROM DEPTW
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1