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

正文內(nèi)容

oraclesql性能優(yōu)化(這個很全的)(編輯修改稿)

2025-02-12 17:04 本頁面
 

【文章內(nèi)容簡介】 ’,NULL))D0030_COUNT,SUM(DECODE(DEPT_NO,0020,SAL,NULL))D0020_SAL,SUM(DECODE(DEPT_NO,0030,SAL,NULL))D0030_SALFROMEMPWHEREENAMELIKE‘SMITH%’。減少對表的查詢在含有子查詢的 SQL語句中 ,要特別注意減少對表的查詢 .例如 :低效 SELECTTAB_NAMEFROMTABLESWHERETAB_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ù)這個原理 , 當(dāng)在 WHERE子句中有多個表聯(lián)接時, WHERE子句中排在最后的表應(yīng)當(dāng)是返回行數(shù)可能最少的表,有過濾條件的子句應(yīng)放在 WHERE子句中的最后。? 如:設(shè)從 emp表查到的數(shù)據(jù)比較少或該表的過濾條件比較確定,能大大縮小查詢范圍,則將最具有選擇性部分放在 WHERE子句中的最后:select*fromempe,deptdwhere10and=30? 如果 dept表返回的記錄數(shù)較多的話,上面的查詢語句會比下面的查詢語句響應(yīng)快得多。select*fromempe,deptdwhere=30and10WHERE子句 ——函數(shù)、表達式使用? 最好不要在 WHERE子句中使用函或表達式,如果要使用的話,最好統(tǒng)一使用相同的表達式或函數(shù),這樣便于以后使用合理的索引。Orderby語句 ? ORDERBY語句決定了 Oracle如何將返回的查詢結(jié)果排序。 Orderby語句對要排序的列沒有什么特別的限制,也可以將函數(shù)加入列中(象聯(lián)接或者附加等)。 任何在 Orderby語句的非索引項或者有計算表達式都將降低查詢速度。? 仔細檢查 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)建的索引沒有使用。 當(dā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。在很多情況下可能無法避免這種情況,但是一定要心中有底,通配符如此使用會降低查詢速度。然而當(dāng)通配符出現(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í)行了一個全表遍歷 ).使用 NOT EXISTS 子句可以有效地利用索引。盡可能使用 NOT EXISTS來代替 NOT IN,盡管二者都使用了 NOT(不能使用索引而降低速度),NOT EXISTS要比 NOT IN查詢效率更高。例如 :– 語句 1– SELECTdname,deptnoFROMdeptWHEREdeptnoNOTIN(SELECTdeptnoFROMemp)。– 語句 2– 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ù)比全表掃描要快 .當(dāng) ORACLE找出執(zhí)行查詢和 Update語句的最佳路徑時 ,ORACLE優(yōu)化器將使用索引 .同樣在聯(lián)結(jié)多個表時使用索引也可以提高效率 .另一個使用索引的好處是 ,它提供了主鍵 (primarykey)的唯一性驗證。通常 ,在大型表中使用索引特別有效 .當(dāng)然 ,你也會發(fā)現(xiàn) ,在掃描小表時 ,使用索引同樣能提高效率 .雖然使用索引能得到查詢效率的提高 ,但是我們也必須注意到它的代價 .索引需要空間來存儲 ,也需要定期維護 ,每當(dāng)有記錄在表中增減或索引列被修改時 ,索引本身也會被修改 .這意味著每條記錄的 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命令? 例子:– select*fromemployeewheresalary3000。? 對這個查詢,可以改寫為不使用 NOT:– select*fromemployeewheresalary3000orsalary3000。雖然這兩種查詢的結(jié)果一樣,但是第二種查詢方案會比第一種查詢方案更快些。第二種查詢允許 Oracle對 salary列使用索引,而第一種查詢則不能使用索引。如果有其它辦法,不要使用子查詢。外部聯(lián)接 +的用法 ? 外部聯(lián)接 +按其在 =的左邊或右邊分左聯(lián)接和右聯(lián)接。若不帶 +運算符的表中的一個行不直接匹配于帶 +預(yù)算符的表中的任何行,則前者的行與后者中的一個空行相匹配并被返回。利用外部聯(lián)接 +,可以替代效率十分低下的 not in 運算,大大提高運行速度。例如,下面這條命令執(zhí)行起來很慢:– selectfromempawherenotin(selectempnofromemp1wherejob=39。SALE39。)。? 利用外部聯(lián)接,改寫命令如下 : – selectfromempa,emp1b– where=(+)– andisnull– and=39。SALE39。這樣運行速度明顯提高 .盡量多使用 COMMIT事務(wù)是消耗資源的,大事務(wù)還容易引起死鎖COMMIT所釋放的資源 :252。 回滾段上用于恢復(fù)數(shù)據(jù)的信息 .252。 被程序語句獲得的鎖252。redologbuffer中的空間252。ORACLE為管理上述 3種資源中的內(nèi)部花費用 TRUNCATE替代 DELETE當(dāng)刪除表中的記錄時 ,在通常情況下 ,回滾段(rollbacksegments)用來存放可以被恢復(fù)的信息 .如果你沒有COMMIT事務(wù) ,ORACLE會將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài) (準(zhǔn)確地說是恢復(fù)到執(zhí)行刪除命令之前的狀況 )而當(dāng)運用 TRUNCATE時 ,回滾段不再存放任何可被恢復(fù)的信息 .當(dāng)命令運行后 ,數(shù)據(jù)不能被恢復(fù) .因此很少的資源被調(diào)用 ,執(zhí)行時間也會很短 .計算記錄條數(shù)和一般的觀點相反 ,count(*)比 count(1)稍快 ,當(dāng)然如果可以通過索引檢索 ,對索引列的計數(shù)仍舊是最快的 .例如 COUNT(EMPNO)字符型字段的引號比如有的表 PHONE_NO字段是 CHAR型 ,而且創(chuàng)建有索引,但在 WHERE條件中忘記了加引號,就不會用到索引。WHEREPHONE_NO=‘13920232023’WHEREPHONE_NO=13920232023優(yōu)化 EX
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1