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

正文內(nèi)容

oracle培訓sql性能優(yōu)化(編輯修改稿)

2025-02-23 07:30 本頁面
 

【文章內(nèi)容簡介】 HERETAB_NAME=(SELECTTAB_NAMEFROMTAB_COLUMNSWHEREVERSION=604)AND  DB_VER=(SELECTDB_VERFROMTAB_COLUMNSWHEREVERSION=604)高效SELECTTAB_NAMEFROMTABLESWHERE(TAB_NAME,DB_VER) =(SELECTTAB_NAME,DB_VER)FROMTAB_COLUMNSWHEREVERSION=604)4.細節(jié)上的影響WHERE子句中的連接順序ORACLE采用自下而上的順序解析 WHERE子句 ,根據(jù)這個原理 ,當在 WHERE子句中有多個表聯(lián)接時, WHERE子句中排在最后的表應(yīng)當是返回行數(shù)可能最少的表,有過濾條件的子句應(yīng)放在 WHERE子句中的最后。n 如:設(shè)從 emp表查到的數(shù)據(jù)比較少或該表的過濾條件比較確定,能大大縮小查詢范圍,則將最具有選擇性部分放在 WHERE子句中的最后:select*fromempe,deptdwhere10and=30n 如果 dept表返回的記錄數(shù)較多的話,上面的查詢語句會比下面的查詢語句響應(yīng)快得多。select*fromempe,deptdwhere=30and10WHERE子句 —— 函數(shù)、表達式使用n最好不要在 WHERE子句中使用函或表達式,如果要使用的話,最好統(tǒng)一使用相同的表達式或函數(shù),這樣便于以后使用合理的索引。Orderby語句 n ORDERBY語句決定了 Oracle如何將返回的查詢結(jié)果排序。 Orderby語句對要排序的列沒有什么特別的限制,也可以將函數(shù)加入列中(象聯(lián)接或者附加等)。 任何在 Orderby語句的非索引項或者有計算表達式都將降低查詢速度。n 仔細檢查 orderby語句以找出非索引項或者表達式,它們會降低性能。解決這個問題的辦法就是重寫 orderby語句以使用索引,也可以為所使用的列建立另外一個索引,同時應(yīng)絕對避免在 orderby子句中使用表達式。聯(lián)接列 對于有聯(lián)接的列,即使最后的聯(lián)接值為一個靜態(tài)值,優(yōu)化器是不會使用索引的。 select*fromemployss  where  first_name||39。39。||last_name=39。BeillCliton39。系統(tǒng)優(yōu)化器對基于 last_name創(chuàng)建的索引沒有使用。 當采用下面這種 SQL語句的編寫, Oracle系統(tǒng)就可以采用基于 last_name創(chuàng)建的索引。   select*fromemployee   wherefirst_name=39。Beill39。andlast_name=39。Cliton39。帶通配符( %)的 like語句 通配符( %)在搜尋詞首出現(xiàn), Oracle系統(tǒng)不使用last_name的索引。select*fromemployeewherelast_namelike39。%cliton%39。在很多情況下可能無法避免這種情況,但是一定要心中有底,通配符如此使用會降低查詢速度。然而當通配符出現(xiàn)在字符串其他位置時,優(yōu)化器就能利用索引。在下面的查詢中索引得到了使用: select*fromemployeewherelast_namelike39。c%39。用 Where子句替換 HAVING子句避免使用 HAVING子句 ,HAVING只會在檢索出所有記錄之后才對結(jié)果集進行過濾 .這個處理需要排序 ,總計等操作 .如果能通過 WHERE子句限制記錄的數(shù)目 ,那就能減少這方面的開銷 .例如 :低效 :SELECTREGION, AVG(LOG_SIZE)FROMLOCATIONGROUPBYREGIONHAVINGREGIONREGION!=‘SYDNEY’ANDREGION!=‘PERTH’高效SELECTREGION, AVG(LOG_SIZE)FROMLOCATIONWHEREREGIONREGION!=‘SYDNEY’ANDREGION!=‘PERTH’GROUPBYREGION順序WHEREGROUPHAVING用 NOTEXISTS替代 NOTIN在子查詢中 ,NOTIN子句將執(zhí)行一個內(nèi)部的排序和合并 .無論在哪種情況下 ,NOTIN都是最低效的 (因為它對子查詢中的表執(zhí)行了一個全表遍歷 ).使用 NOTEXISTS子句可以有效地利用索引。盡可能使用 NOTEXISTS來代替 NOTIN,盡管二者都使用了 NOT(不能使用索引而降低速度),NOTEXISTS要比 NOTIN查詢效率更高。例如 :168。 語句 1168。 SELECTdname,deptnoFROMdeptWHEREdeptnoNOTIN(SELECTdeptnoFROMemp)。168。 語句 2168。 SELECTdname,deptnoFROMdeptWHERENOTEXISTS(SELECTdeptnoFROMempWHERE=)。2要比 1的執(zhí)行性能好很多。因為 1中對 emp進行了 full table scan,這是很浪費時間的操作。而且 1中沒有用到 emp的 index, 因為沒有 where子句。而 2中的語句對 emp進行的是縮小范圍的查詢。用索引提高效率索引是表的一個概念部分 ,用來提高檢索數(shù)據(jù)的效率, ORACLE使用了一個復(fù)雜的自平衡 Btree結(jié)構(gòu) .通常 ,通過索引查詢數(shù)據(jù)比全表掃描要快 .當 ORACLE找出執(zhí)行查詢和 Update語句的最佳路徑時 ,ORACLE優(yōu)化器將使用索引 .同樣在聯(lián)結(jié)多個表時使用索引也可以提高效率 .另一個使用索引的好處是 ,它提供了主鍵 (primarykey)的唯一性驗證。通常 ,在大型表中使用索引特別有效 .當然 ,你也會發(fā)現(xiàn) ,在掃描小表時 ,使用索引同樣能提高效率 .雖然使用索引能得到查詢效率的提高 ,但是我們也必須注意到它的代價 .索引需要空間來存儲 ,也需要定期維護 ,每當有記錄在表中增減或索引列被修改時 ,索引本身也會被修改 .這意味著每條記錄的 INSERT,DELETE,UPDATE將為此多付出 4,5次的磁盤 I/O.因為索引需要額外的存儲空間和處理 ,那些不必要的索引反而會使查詢反應(yīng)時間變慢 .。定期的重構(gòu)索引是有必要的。避免在索引列上使用計算WHERE子句中,如果索引列是函數(shù)的一部分.優(yōu)化器將不使用索引而使用全表掃描. 低效: SELECT…FROMDEPTWHERESAL*1225000。高效 :SELECT…FROMDEPTWHERESAL25000/12。用 =替代 如果 DEPTNO上有一個索引。高效 :SELECT*FROMEMPWHEREDEPTNO=4低效 :SELECT*FROMEMPWHEREDEPTNO3通過使用 =、 =等,避免使用 NOT命令n 例子:168。select*fromemployeewheresalary3000。n 對這個查詢,可以改寫為不使用 NOT:168。select*fromemployeewheresalary3000orsalary3000。雖然這兩種查詢的結(jié)果一樣,但是第二種查詢方案會比第一種查詢方案更快些。第二種查詢允許 Oracle對 salary列使用索引,而第一種查詢則不能使用索引。如果有其它辦法,不要使用子查詢。用 TRUNCATE
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1