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

正文內(nèi)容

oracle-sql優(yōu)化-文庫(kù)吧資料

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

【正文】 = 10033 union4 select * from unionvsor5 where b = 1。5 4 INDEX (RANGE SCAN) OF 39。 (NONUNIQUE)4 1 TABLE ACCESS (BY INDEX ROWID) OF 39。3 2 INDEX (RANGE SCAN) OF 39。 本篇文章來源于:開發(fā)學(xué)院 原文鏈接:ORACLE SQL性能優(yōu)化系列 (一)amp。1003 rows selected.Execution Plan0 SELECT STATEMENT Optimizer=CHOOSE1 0 CONCATENATION2 1 TABLE ACCESS (BY INDEX ROWID) OF 39。UA39。UNIONVSOR39。UB39。UNIONVSOR39。 (UNIQUE) 兩者的效率完全一樣,也許這符合作者關(guān)于” 在某些時(shí)候, ORACLE優(yōu)化器會(huì)自動(dòng)將NOT轉(zhuǎn)化成相對(duì)應(yīng)的關(guān)系操作符” 的觀點(diǎn). 35. 用=替代 如果DEPTNO上有一個(gè)索引, 高效: SELECT *FROM EMPWHERE DEPTNO =4 低效: SELECT *FROM EMPWHERE DEPTNO 3 兩者的區(qū)別在于, 前者DBMS將直接跳到第一個(gè)DEPT等于4的記錄而后者將首先定位到DEPTNO=3的記錄并且向前掃描到第一個(gè)DEPT大于3的記錄.ORACLE SQL性能優(yōu)化系列 (十一) 36. 用UNION替換OR (適用于索引列)通常情況下, 用UNION替換WHERE子句中的OR將會(huì)起到較好的效果. 對(duì)索引列使用OR將造成全表掃描. 注意, 以上規(guī)則只針對(duì)多個(gè)索引列有效. 如果有column沒有被索引, 查詢效率可能會(huì)因?yàn)槟銢]有選擇OR而降低.在下面的例子中, LOC_ID 和REGION上都建有索引.高效:SELECT LOC_ID , LOC_DESC , REGIONFROM LOCATIONWHERE LOC_ID = 10UNIONSELECT LOC_ID , LOC_DESC , REGIONFROM LOCATIONWHERE REGION = “MELBOURNE” 低效:SELECT LOC_ID , LOC_DESC , REGIONFROM LOCATIONWHERE LOC_ID = 10 OR REGION = “MELBOURNE” 如果你堅(jiān)持要用OR, 那就需要返回記錄最少的索引列寫在最前面. 注意: WHERE KEY1 = 10 (返回最少記錄)OR KEY2 = 20 (返回最多記錄) ORACLE 內(nèi)部將以上轉(zhuǎn)換為WHERE KEY1 = 10 AND((NOT KEY1 = 10) AND KEY2 = 20) 譯者按: 下面的測(cè)試數(shù)據(jù)僅供參考: (a = 1003 返回一條記錄 , b = 1 返回1003條記錄)SQL select * from unionvsor /*1st test*/2 where a = 1003 or b = 1。2 1 INDEX (RANGE SCAN) OF 39。no rows selectedExecution Plan0 SELECT STATEMENT Optimizer=CHOOSE1 0 TABLE ACCESS (BY INDEX ROWID) OF 39。EMPNO39。EMP39。 需要注意的是,在某些時(shí)候, ORACLE優(yōu)化器會(huì)自動(dòng)將NOT轉(zhuǎn)化成相對(duì)應(yīng)的關(guān)系操作符.NOT to =NOT = to NOT to =NOT = to 譯者按:在這個(gè)例子中,作者犯了一些錯(cuò)誤. 例子中的低效率SQL是不能被執(zhí)行的.我做了一些測(cè)試: SQL select * from emp where NOT empno 1。 這里,只有EMPNO上的索引是唯一性的,所以EMPNO索引將用來檢索記錄.TABLE ACCESS BY ROWID ON EMPINDEX UNIQUE SCAN ON EMP_NO_IDX 34. 避免在索引列上使用NOT通常, 我們要避免在索引列上使用NOT, NOT會(huì)產(chǎn)生在和在索引列上使用函數(shù)相同的影響. 當(dāng)ORACLE”遇到”NOT,他就會(huì)停止使用索引轉(zhuǎn)而執(zhí)行全表掃描.舉例: 低效: (這里,不使用索引) SELECT …FROM DEPTWHERE DEPT_CODE NOT = 0。 高效:SELECT …FROM DEPTWHERE SAL 25000/12。用下面的方案就可以解決問題.SELECT ENAMEFROM EMPWHERE EMP_TYPE = ‘A’AND EMP_CLASS||’’ = ‘X’。 優(yōu)化器會(huì)注意到EMP_TYPE上的索引并使用它. 這是目前唯一的選擇. 如果,一段時(shí)間以后, 另一個(gè)非唯一性建立在EMP_CLASS上,優(yōu)化器必須對(duì)兩個(gè)索引進(jìn)行選擇,在通常情況下,優(yōu)化器將使用兩個(gè)索引并在他們的結(jié)果集合上執(zhí)行排序及合并. 然而,如果其中一個(gè)索引(EMP_TYPE)接近于唯一性而另一個(gè)索引(EMP_CLASS)上有幾千個(gè)重復(fù)的值. 排序及合并就會(huì)成為一種不必要的負(fù)擔(dān). 在這種情況下,你希望使優(yōu)化器屏蔽掉EMP_CLASS索引. 本篇文章來源于:開發(fā)學(xué)院 原文鏈接:ORACLE SQL性能優(yōu)化系列 (一)amp。EMPTYPE39。EMP39。 。 INDEX_NAME UNIQUENES EMPNO UNIQUEEMPTYPE NONUNIQUE SQL select * from emp where empno = 2 and emp_type = 39。 這里, ORACLE只用到了DEPT_NO索引. 執(zhí)行路徑如下: TABLE ACCESS BY ROWID ON EMPINDEX RANGE SCAN ON DEPT_IDX 譯者按:我們來試一下以下這種情況:SQL select index_name, uniqueness from user_indexes where table_name = 39。這里,DEPTNO索引將被最先檢索,然后同EMP_CAT索引檢索出的記錄進(jìn)行合并. 執(zhí)行路徑如下: TABLE ACCESS BY ROWID ON EMPANDEQUALINDEX RANGE SCAN ON DEPT_IDXINDEX RANGE SCAN ON CAT_IDX 29. 等式比較和范圍比較當(dāng)WHERE子句中有索引列, ORACLE不能合并它們,ORACLE將用范圍比較. 舉例:DEPTNO上有一個(gè)非唯一性索引,EMP_CAT也有一個(gè)非唯一性索引.SELECT ENAMEFROM EMPWHERE DEPTNO 20AND EMP_CAT = ‘A’。 在這種情況下,ORACLE將使用全表掃描.ORACLE SQL性能優(yōu)化系列 (九) 27. 基礎(chǔ)表的選擇 基礎(chǔ)表(Driving Table)是指被最先訪問的表(通常以全表掃描的方式被訪問). 根據(jù)優(yōu)化器的不同, SQL語句中基礎(chǔ)表的選擇是不一樣的.如果你使用的是CBO (COST BASED OPTIMIZER),優(yōu)化器會(huì)檢查SQL語句中的每個(gè)表的物理大小,索引的狀態(tài),然后選用花費(fèi)最低的執(zhí)行路徑.如果你用RBO (RULE BASED OPTIMIZER) , 并且所有的連接條件都有索引對(duì)應(yīng), 在這種情況下, 基礎(chǔ)表就是FROM 子句中列在最后的那個(gè)表.舉例:SELECT , FROM WORKER A,LODGING BWHERE  = 。nbsp。 WHERE子句條件包括一系列值, ORACLE將通過索引范圍查詢的方式查詢LODGING_PK . 由于索引范圍查詢將返回一組值, 它的效率就要比索引唯一掃描低一些. 例2: SELECT LODGINGFROM LODGINGWHERE MANAGER = ‘BILL GATES’。 在內(nèi)部 , 上述SQL將被分成兩步執(zhí)行, 首先 , LODGING_PK 索引將通過索引唯一掃描的方式被訪問 , 獲得相對(duì)應(yīng)的ROWID, 通過ROWID訪問表的方式執(zhí)行下一步檢索.如果被檢索返回的列包括在INDEX列中,ORACLE將不執(zhí)行第二步的處理(通過ROWID訪問表). 因?yàn)闄z索數(shù)據(jù)保存在索引中, 單單訪問索引就可以完全滿足查詢結(jié)果.下面SQL只需要INDEX UNIQUE SCAN 操作. SELECT LODGINGFROM LODGINGWHERE LODGING = ‘ROSE HILL’。DEPT39。PK_DEPT39。EMP39。PK_DEPT39。DEPT39。EMP39。 /*traceonly 可以不顯示執(zhí)行結(jié)果*/或者SQL set autotrace traceonly exp。 EXISTS 使查詢更為迅速,因?yàn)镽DBMS核心模塊將在子查詢的條件一旦滿足后,立刻返回結(jié)果. 22. 識(shí)別’低效執(zhí)行’的SQL語句 用下列SQL工具找出低效SQL: SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,ROUND((BUFFER_GETSDISK_READS)/BUFFER_GETS,2) Hit_radio,ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,SQL_TEXTFROM V$SQLAREAWHERE EXECUTIONS0AND BUFFER_GETS 0AND (BUFFER_GETSDISK_READS)/BUFFER_GETS ORDER BY 4 DESC。 (更高效)SELECT ENAMEFROM DEPT D,EMP EWHERE = AND DEPT_CAT = ‘A’ 。 SELECT ,LOOKUP_EMP(),LOOKUP_HIST_TYPE(),COUNT(*)FROM EMP_HISTORY HGROUP BY , 。RETURN (NVL(ENAME,’?’))。FETCH C1 INTO ENAME。CURSOR C1 ISSELECT ENAMEFROM EMPWHERE EMPNO=EMP。END。CLOSE C1。BEGINOPEN C1。 通過調(diào)用下面的函數(shù)可以提高效率.FUNCTION LOOKUP_HIST_TYPE(TYP IN NUMBER) RETURN VARCHAR2ASTDESC VARCHAR2(30)。 高效:UPDATE EMPSET (EMP_CAT, SAL_RANGE)= (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)FROM EMP_CATEGORIES)WHERE EMP_DEPT = 0020。nbsp。 (譯者按: 雖然采取這種方法,效率得到提高,但是程序的可讀性大大降低,所以讀者 還是要權(quán)衡之間的利弊) 10. 刪除重復(fù)記錄最高效的刪除重復(fù)記錄方法 ( 因?yàn)槭褂昧薘OWID) DELETE FROM EMP EWHERE (SELECT MIN()FROM EMP XWHERE = )。 SELECT NAMEFROM CATWHERE CAT_TYPE = ‘RD’。 類似的,DECODE函數(shù)也可以運(yùn)用于GROUP BY 和ORDER BY子句中. 9. 整合簡(jiǎn)單,無關(guān)聯(lián)的數(shù)據(jù)庫(kù)訪問 如果你有幾個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)查詢語句,你可以把它們整合到一個(gè)查詢中(即使它們之間沒有關(guān)系)例如: SELECT NAMEFROM EMPWHERE EMP_NO = 1234。 SELECT COUNT(*),SUM(SAL)FROM EMPWHERE DEPT_NO = 0030AND ENAME LIKE ‘SMITH%’。 方法3 (高效) SELECT , , , , , FROM EMP A,EMP BWHERE = 342AND = 291。CLOSE C1?!?.OPEN C
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1