涓轰粈涔堟湁鏃禣racle鏁版嵁搴撲笉鐢ㄧ储寮曟潵鏌ユ壘鏁版嵁锛
鍙戝竷: 2008-6-30 22:35 | 浣滆: admin | 鏌ョ湅: 7娆

涓轰粈涔堟湁鏃禣racle鏁版嵁搴撲笉鐢ㄧ储寮曟潵鏌ユ壘鏁版嵁锛
銆愬瓧浣擄細灏 澶с
涓轰粈涔堟湁鏃禣racle鏁版嵁搴撲笉鐢ㄧ储寮曟潵鏌ユ壘鏁版嵁锛
浣滆咃細- 鏂囩珷鏉ユ簮锛- 鐐瑰嚮鏁帮細249 鏇存柊鏃堕棿锛2007-8-1 
涓轰粈涔堟湁鏃禣racle鏁版嵁搴撲笉鐢ㄧ储寮曟潵鏌ユ壘鏁版嵁锛
銆褰撲綘杩愮敤SQL璇█锛屽悜鏁版嵁搴撳彂甯冧竴鏉℃煡璇㈣鍙ユ椂锛孫RACLE灏嗕即闅忎骇鐢熶竴涓滄墽琛岃鍒掆濓紝涔熷氨鏄璇彞灏嗛氳繃浣曠鏁版嵁鎼滅储鏂规鎵ц锛屾槸閫氳繃鍏ㄨ〃鎵弿銆佽繕鏄氳繃绱㈠紩鎼滃绛夊叾瀹冩柟寮忋傛悳绱㈡柟妗堢殑閫夌敤涓嶰racle鐨勪紭鍖栧櫒鎭伅鐩稿叧銆
銆銆SQL璇彞鐨勬墽琛屾楠
銆銆涓鏉QL璇彞鐨勫鐞嗚繃绋嬭缁忚繃浠ヤ笅鍑犱釜姝ラ銆
銆銆1 璇硶鍒嗘瀽 鍒嗘瀽璇彞鐨勮娉曟槸鍚︾鍚堣鑼冿紝琛¢噺璇彞涓悇琛ㄨ揪寮忕殑鎰忎箟銆
銆銆2 璇箟鍒嗘瀽 妫鏌ヨ鍙ヤ腑娑夊強鐨勬墍鏈夋暟鎹簱瀵硅薄鏄惁瀛樺湪锛屼笖鐢ㄦ埛鏈夌浉搴旂殑鏉冮檺銆
銆銆3 瑙嗗浘杞崲 灏嗘秹鍙婅鍥剧殑鏌ヨ璇彞杞崲涓虹浉搴旂殑瀵瑰熀琛ㄦ煡璇㈣鍙ャ
銆銆4 琛ㄨ揪寮忚浆鎹 灏嗗鏉傜殑SQL琛ㄨ揪寮忚浆鎹负杈冪畝鍗曠殑绛夋晥杩炴帴琛ㄨ揪寮忋
銆銆5 閫夋嫨浼樺寲鍣 涓嶅悓鐨勪紭鍖栧櫒涓鑸骇鐢熶笉鍚岀殑鈥滄墽琛岃鍒掆
銆銆6 閫夋嫨杩炴帴鏂瑰紡 ORACLE鏈変笁绉嶈繛鎺ユ柟寮忥紝瀵瑰琛ㄨ繛鎺racle鍙夋嫨閫傚綋鐨勮繛鎺ユ柟寮忋
銆銆7 閫夋嫨杩炴帴椤哄簭 瀵瑰琛ㄨ繛鎺racle閫夋嫨鍝竴瀵硅〃鍏堣繛鎺ワ紝閫夋嫨杩欎袱琛ㄤ腑鍝釜琛ㄥ仛涓烘簮鏁版嵁琛ㄣ
銆銆8 閫夋嫨鏁版嵁鐨勬悳绱㈣矾寰 鏍规嵁浠ヤ笂鏉′欢閫夋嫨鍚堥傜殑鏁版嵁鎼滅储璺緞锛屽鏄夌敤鍏ㄨ〃鎼滅储杩樻槸鍒╃敤绱㈠紩鎴栨槸鍏朵粬鐨勬柟寮忋
銆銆9 杩愯鈥滄墽琛岃鍒掆
銆銆Oracle鐨勪紭鍖栧櫒
銆銆Oracle鏈変袱绉嶄紭鍖栧櫒锛氬熀浜庤鍒欑殑浼樺寲鍣紙RBO锛 Rule Based Optimizer锛夛紝鍜屽熀浜庝唬浠风殑浼樺寲鍣紙CBO锛 Cost Based Optimizer锛夈
銆銆RBO鑷狾RACLE 6鐗堜互鏉ヨ閲囩敤锛屾湁鐫涓濂椾弗鏍肩殑浣跨敤瑙勫垯锛屽彧瑕佷綘鎸夌収瀹冨幓鍐橲QL璇彞锛屾棤璁烘暟鎹〃涓殑鍐呭鎬庢牱锛屼篃涓嶄細褰卞搷鍒颁綘鐨勨滄墽琛岃鍒掆濓紝涔熷氨鏄瀵规暟鎹笉鈥滄晱鎰熲濓紝Oracle鍏徃宸茬粡涓嶅啀鍙戝睍杩欑鎶鏈簡銆
銆銆CBO鑷狾RACLE 7鐗堣寮曞叆锛孫RACLE鑷7鐗堜互鏉ラ噰鐢ㄧ殑璁稿鏂版妧鏈兘鏄熀浜嶤BO鐨勶紝濡傛槦鍨嬭繛鎺ユ帓鍒楁煡璇紝鍝堝笇杩炴帴鏌ヨ锛屽拰骞惰鏌ヨ绛夈侰BO璁$畻鍚勭鍙兘鈥滄墽琛岃鍒掆濈殑鈥滀唬浠封濓紝鍗砪ost锛屼粠涓夌敤cost鏈浣庣殑鏂规锛屼綔涓哄疄闄呰繍琛屾柟妗堛傚悇鈥滄墽琛岃鍒掆濈殑cost鐨勮绠楁牴鎹紝渚濊禆浜庢暟鎹〃涓暟鎹殑缁熻鍒嗗竷锛孫racle鏁版嵁搴撴湰韬璇ョ粺璁″垎甯冨苟涓嶆竻妤氾紝椤昏鍒嗘瀽琛ㄥ拰鐩稿叧鐨勭储寮曪紝鎵嶈兘鎼滈泦鍒癈BO鎵闇鐨勬暟鎹
銆銆涓鑸岃█锛孋BO鎵閫夋嫨鐨勨滄墽琛岃鍒掆濋兘涓嶄細姣擱BO鐨勨滄墽琛岃鍒掆濆樊锛岃屼笖鐩稿鑰岃█锛孋BO瀵圭▼搴忓憳鐨勮姹傛病鏈塕BO閭d箞鑻涘埢锛岃妭鐪佷簡绋嬪簭鍛樹负浜嗕粠澶氫釜鍙兘鐨勨滄墽琛岃鍒掆濅腑閫夋嫨涓涓渶浼樼殑鏂规鑰岃姳璐圭殑璋冭瘯鏃堕棿锛屼絾鍦ㄦ煇浜涘満鍚堜笅涔熶細瀛樺湪闂銆
銆銆杈冨吀鍨嬬殑闂鏈夛細鏈夋椂锛岃〃鏄庢槑寤烘湁绱㈠紩锛屼絾鏌ヨ杩囩▼鏄剧劧娌℃湁鐢ㄥ埌鐩稿叧鐨勭储寮曪紝瀵艰嚧鏌ヨ杩囩▼鑰楁椂婕暱锛屽崰鐢ㄨ祫婧愬法澶э紝闂鍒板簳鍑哄湪鍝効鍛紵鎸夌収浠ヤ笅椤哄簭鏌ユ壘锛屽熀鏈笂鑳藉彂鐜板師鍥犳墍鍦ㄣ
銆銆鏌ユ壘鍘熷洜鐨勬楠
銆銆棣栧厛锛屾垜浠纭畾鏁版嵁搴撹繍琛屽湪浣曠浼樺寲妯″紡涓嬶紝鐩稿簲鐨勫弬鏁版槸锛歰ptimizer_mode銆傚彲鍦╯vrmgrl涓繍琛屸渟how parameter optimizer_mode"鏉ユ煡鐪嬨侽racle V7浠ユ潵缂虹渷鐨勮缃簲鏄"choose"锛屽嵆濡傛灉瀵瑰凡鍒嗘瀽鐨勮〃鏌ヨ鐨勮瘽閫夋嫨CBO锛屽惁鍒欓夋嫨RBO銆傚鏋滆鍙傛暟璁句负鈥渞ule鈥濓紝鍒欎笉璁鸿〃鏄惁鍒嗘瀽杩囷紝涓姒傞夌敤RBO锛岄櫎闈炲湪璇彞涓敤hint寮哄埗銆
銆銆鍏舵锛屾鏌ヨ绱㈠紩鐨勫垪鎴栫粍鍚堢储寮曠殑棣栧垪鏄惁鍑虹幇鍦≒L/SQL璇彞鐨刉HERE瀛愬彞涓紝杩欐槸鈥滄墽琛岃鍒掆濊兘鐢ㄥ埌鐩稿叧绱㈠紩鐨勫繀瑕佹潯浠躲
銆銆绗笁锛岀湅閲囩敤浜嗗摢绉嶇被鍨嬬殑杩炴帴鏂瑰紡銆侽racle鐨勫叡鏈塖ort Merge Join锛圫MJ锛夈丠ash Join锛圚J锛夊拰Nested Loop Join锛圢L锛夈傚湪涓ゅ紶琛ㄨ繛鎺ワ紝涓斿唴琛ㄧ殑鐩爣鍒椾笂寤烘湁绱㈠紩鏃讹紝鍙湁Nested Loop鎵嶈兘鏈夋晥鍦板埄鐢ㄥ埌璇ョ储寮曘係MJ鍗充娇鐩稿叧鍒椾笂寤烘湁绱㈠紩锛屾渶澶氬彧鑳藉洜绱㈠紩鐨勫瓨鍦紝閬垮厤鏁版嵁鎺掑簭杩囩▼銆侶J鐢变簬椤诲仛HASH杩愮畻锛岀储寮曠殑瀛樺湪瀵规暟鎹煡璇㈤熷害鍑犱箮娌℃湁褰卞搷銆
銆銆绗洓锛岀湅杩炴帴椤哄簭鏄惁鍏佽浣跨敤鐩稿叧绱㈠紩銆傚亣璁捐〃emp鐨刣eptno鍒椾笂鏈夌储寮曪紝琛╠ept鐨勫垪deptno涓婃棤绱㈠紩锛學HERE璇彞鏈塭mp.deptno=dept.deptno鏉′欢銆傚湪鍋歂L杩炴帴鏃讹紝emp鍋氫负澶栬〃锛屽厛琚闂紝鐢变簬杩炴帴鏈哄埗鍘熷洜锛屽琛ㄧ殑鏁版嵁璁块棶鏂瑰紡鏄叏琛ㄦ壂鎻忥紝emp.deptno涓婄殑绱㈠紩鏄剧劧鏄敤涓嶄笂锛屾渶澶氬湪鍏朵笂鍋氱储寮曞叏鎵弿鎴栫储寮曞揩閫熷叏鎵弿銆
銆銆绗簲锛屾槸鍚︾敤鍒扮郴缁熸暟鎹瓧鍏歌〃鎴栬鍥俱傜敱浜庣郴缁熸暟鎹瓧鍏歌〃閮芥湭琚垎鏋愯繃锛屽彲鑳藉鑷存瀬宸殑鈥滄墽琛岃鍒掆濄備絾鏄笉瑕佹搮鑷鏁版嵁瀛楀吀琛ㄥ仛鍒嗘瀽锛屽惁鍒欏彲鑳藉鑷存閿侊紝鎴栫郴缁熸ц兘涓嬮檷銆
銆銆绗叚锛岀储寮曞垪鏄惁鍑芥暟鐨勫弬鏁般傚鏄紝绱㈠紩鍦ㄦ煡璇㈡椂鐢ㄤ笉涓娿
銆銆绗竷锛屾槸鍚﹀瓨鍦ㄦ綔鍦ㄧ殑鏁版嵁绫诲瀷杞崲銆傚灏嗗瓧绗﹀瀷鏁版嵁涓庢暟鍊煎瀷鏁版嵁姣旇緝锛孫racle浼氳嚜鍔ㄥ皢瀛楃鍨嬬敤to_number()鍑芥暟杩涜杞崲锛屼粠鑰屽鑷寸鍏鐜拌薄鐨勫彂鐢熴
銆銆绗叓锛屾槸鍚︿负琛ㄥ拰鐩稿叧鐨勭储寮曟悳闆嗚冻澶熺殑缁熻鏁版嵁銆傚鏁版嵁缁忓父鏈夊銆佸垹銆佹敼鐨勮〃鏈濂藉畾鏈熷琛ㄥ拰绱㈠紩杩涜鍒嗘瀽锛屽彲鐢⊿QL璇彞鈥渁nalyze table xxxx compute statistics for all indexes;"銆侽racle鎺屾彙浜嗗厖鍒嗗弽鏄犲疄闄呯殑缁熻鏁版嵁锛屾墠鏈夊彲鑳藉仛鍑烘纭殑閫夋嫨銆
銆銆绗節锛岀储寮曞垪鐨勯夋嫨鎬т笉楂樸
銆銆鎴戜滑鍋囪鍏稿瀷鎯呭喌锛屾湁琛╡mp锛屽叡鏈変竴鐧句竾琛屾暟鎹紝浣嗗叾涓殑emp.deptno鍒楋紝鏁版嵁鍙湁4绉嶄笉鍚岀殑鍊硷紝濡10銆20銆30銆40銆傝櫧鐒秂mp鏁版嵁琛屾湁寰堝锛孫RACLE缂虹渷璁ゅ畾琛ㄤ腑鍒楃殑鍊兼槸鍦ㄦ墍鏈夋暟鎹鍧囧寑鍒嗗竷鐨勶紝涔熷氨鏄姣忕deptno鍊煎悇鏈25涓囨暟鎹涓庝箣瀵瑰簲銆傚亣璁維QL鎼滅储鏉′欢DEPTNO=10锛屽埄鐢╠eptno鍒椾笂鐨勭储寮曡繘琛屾暟鎹悳绱㈡晥鐜囷紝寰寰涓嶆瘮鍏ㄨ〃鎵弿鐨勯珮锛孫racle鐞嗘墍褰撶劧瀵圭储寮曗滆鑰屼笉瑙佲濓紝璁や负璇ョ储寮曠殑閫夋嫨鎬т笉楂樸
銆銆浣嗘垜浠冭檻鍙︿竴绉嶆儏鍐碉紝濡傛灉涓鐧句竾鏁版嵁琛屽疄闄呬笉鏄湪4绉峝eptno鍊奸棿骞冲潎鍒嗛厤锛屽叾涓湁99涓囪瀵瑰簲鐫鍊10锛5000琛屽搴斿20锛3000琛屽搴斿30锛2000琛屽搴斿40銆傚湪杩欑鏁版嵁鍒嗗竷鍥炬涓闄ゅ间负10澶栫殑鍏跺畠deptno鍊兼悳绱㈡椂锛屾鏃犵枒闂紝濡傛灉绱㈠紩鑳借搴旂敤锛岄偅涔堟晥鐜囦細楂樺嚭寰堝銆傛垜浠彲浠ラ噰鐢ㄥ璇ョ储寮曞垪杩涜鍗曠嫭鍒嗘瀽锛屾垨鐢╝nalyze璇彞瀵硅鍒楀缓绔嬬洿鏂瑰浘锛屽璇ュ垪鎼滈泦瓒冲鐨勭粺璁℃暟鎹紝浣縊racle鍦ㄦ悳绱㈤夋嫨鎬ц緝楂樼殑鍊艰兘鐢ㄤ笂绱㈠紩銆
銆銆绗崄锛岀储寮曞垪鍊兼槸鍚﹀彲涓虹┖锛圢ULL锛夈傚鏋滅储寮曞垪鍊煎彲浠ユ槸绌哄硷紝鍦⊿QL璇彞涓偅浜涢渶瑕佽繑鍥濶ULL鍊肩殑鎿嶄綔锛屽皢涓嶄細鐢ㄥ埌绱㈠紩锛屽COUNT锛*锛夛紝鑰屾槸鐢ㄥ叏琛ㄦ壂鎻忋傝繖鏄洜涓虹储寮曚腑瀛樺偍鍊间笉鑳戒负鍏ㄧ┖銆
銆銆绗崄涓锛岀湅鏄惁鏈夌敤鍒板苟琛屾煡璇紙PQO锛夈傚苟琛屾煡璇㈠皢涓嶄細鐢ㄥ埌绱㈠紩銆
銆銆绗崄浜岋紝鐪婸L/SQL璇彞涓槸鍚︽湁鐢ㄥ埌bind鍙橀噺銆傜敱浜庢暟鎹簱涓嶇煡閬揵ind鍙橀噺鍏蜂綋鏄粈涔堝硷紝鍦ㄥ仛闈炵浉绛夎繛鎺ユ椂锛屽鈥<鈥濓紝鈥>鈥,鈥渓ike鈥濈瓑銆侽racle灏嗗紩鐢ㄧ己鐪佸硷紝鍦ㄦ煇浜涙儏鍐典笅浼氬鎵ц璁″垝閫犳垚褰卞搷銆
銆銆濡傛灉浠庝互涓婂嚑涓柟闈㈤兘鏌ヤ笉鍑哄師鍥犵殑璇濓紝鎴戜滑鍙ソ鐢ㄩ噰鐢ㄥ湪璇彞涓姞hint鐨勬柟寮忓己鍒禣racle浣跨敤鏈浼樼殑鈥滄墽琛岃鍒掆濄
銆銆hint閲囩敤娉ㄩ噴鐨勬柟寮忥紝鏈夎娉ㄩ噴鍜屾娉ㄩ噴涓ょ鏂瑰紡銆
銆銆濡傛垜浠兂瑕佺敤鍒癆琛ㄧ殑IND_COL1绱㈠紩鐨勮瘽锛屽彲閲囩敤浠ヤ笅鏂瑰紡锛
鈥淪ELECT /*+ INDEX锛圓 IND_COL1锛*/ * FROM A WHERE COL1 = XXX;"
銆銆娉ㄦ剰锛屾敞閲婄蹇呴』璺熷湪SELECT涔嬪悗锛屼笖娉ㄩ噴涓殑鈥+鈥濊绱ц窡鐫娉ㄩ噴璧峰绗︹/*鈥濇垨鈥--鈥濓紝鍚﹀垯hint灏辫璁や负鏄竴鑸敞閲婏紝瀵筆L/SQL璇彞鐨勬墽琛屼笉浜х敓浠讳綍褰卞搷銆
銆銆涓ょ鏈夋晥鐨勮窡韪皟璇曟柟娉
銆銆Oracle鎻愪緵浜嗕袱绉嶆湁鏁堢殑宸ュ叿鏉ヨ窡韪皟璇昉L/SQL璇彞鐨勬墽琛岃鍒掋
銆銆涓绉嶆槸EXPLAIN TABLE鏂瑰紡銆傜敤鎴峰繀椤婚鍏堝湪鑷繁鐨勬ā寮忥紙SCHEMA锛変笅锛屽缓绔婸LAN_TABLE琛紝鎵ц璁″垝鐨勬瘡涓姝ラ閮藉皢璁板綍鍦ㄨ琛ㄤ腑锛屽缓琛⊿QL鑴氭湰涓哄湪${Oracle_HOME}/rdbms/admin/涓嬬殑utlxplan.sql銆
銆銆鎵撳紑SQL*PLUS锛岃緭鍏モ淪ET AUTOTRACE ON鈥濓紝鐒跺悗杩愯寰呰皟璇曠殑SQL璇彞銆傚湪缁欏嚭鏌ヨ缁撴灉鍚庯紝Oracle灏嗘樉绀虹浉搴旂殑鈥滄墽琛岃鍒掆濓紝鍖呮嫭浼樺寲鍣ㄧ被鍨嬨佹墽琛屼唬浠枫佽繛鎺ユ柟寮忋佽繛鎺ラ『搴忋佹暟鎹悳绱㈣矾寰勪互鍙婄浉搴旂殑杩炵画璇汇佺墿鐞嗚绛夎祫婧愪唬浠枫
銆銆濡傛灉鎴戜滑涓嶈兘纭畾闇瑕佽窡韪殑鍏蜂綋SQL璇彞锛屾瘮濡傛煇涓簲鐢ㄤ娇鐢ㄤ竴娈垫椂闂村悗锛屽搷搴旈熷害蹇界劧鍙樻參銆傛垜浠繖鏃跺彲浠ュ埄鐢∣racle鎻愪緵鐨勫彟涓涓湁鍔涘伐鍏稵KPROF锛屽搴旂敤鐨勬墽琛岃繃绋嬪叏绋嬭窡韪
銆銆鎴戜滑瑕佸厛鍦ㄧ郴缁熻鍥綱$session涓紝鍙牴鎹甎SERID鎴朚ACHINE锛屾煡鍑虹浉搴旂殑SID鍜孲ERIAL#銆
銆銆浠YS鎴栧叾浠栨湁鎵цDBMS_SYSTEM绋嬪簭鍖呯殑鐢ㄦ埛杩炴帴鏁版嵁搴擄紝鎵ц鈥淓XECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_session锛圫ID锛孲ERIAL#锛孴RUE锛夛紱鈥濄
銆銆鐒跺悗杩愯搴旂敤绋嬪簭锛岃繖鏃跺湪鏈嶅姟鍣ㄧ锛屾暟鎹簱鍙傛暟鈥淯SER_DUMP_DEST鈥濇寚绀虹殑鐩綍涓嬶紝浼氱敓鎴恛ra__xxxx.trc鏂囦欢锛屽叾涓瓁xxx涓鸿璺熻釜搴旂敤鐨勬搷浣滅郴缁熻繘绋嬪彿銆
銆銆搴旂敤绋嬪簭鎵ц瀹屾垚鍚庯紝鐢ㄥ懡浠kprof瀵硅鏂囦欢杩涜鍒嗘瀽銆傚懡浠ょず渚嬶細鈥渢kprof tracefile outputfile explain=userid/password"銆傚湪鎿嶄綔绯荤粺Oracle鐢ㄦ埛涓嬶紝閿叆鈥渢kprof鈥濓紝浼氭湁璇︾粏鐨勫懡浠ゅ府鍔┿傚垎鏋愬悗鐨勮緭鍑烘枃浠秓utputfile涓紝鏈夋瘡涓鏉L/SQL璇彞鐨勨滄墽琛岃鍒掆濄丆PU鍗犵敤銆佺墿鐞嗚娆℃暟銆侀昏緫璇绘鏁般佹墽琛屾椂闀跨瓑閲嶈淇℃伅銆傛牴鎹緭鍑烘枃浠剁殑淇℃伅锛屾垜浠彲浠ュ緢蹇彂鐜板簲鐢ㄤ腑鍝潯PL/SQL璇彞鏄棶棰樼殑鐥囩粨鎵鍦ㄣ




发表于 2009-1-5 19:48
| 











