Index or table scans(绱㈠紩鎴栬€呰〃鎵弿)錛氬彲鑳芥剰鍛崇潃闇€瑕佹洿濂界殑鎴栬€呴澶栫殑绱㈠紩銆?/p>
Bookmark Lookups(涔︾鏌ユ壘)錛氳€冭檻淇敼褰撳墠鐨勮仛闆嗙儲寮曪紝浣跨敤澶嶇洊绱㈠紩錛岄檺鍒禨ELECT璇彞涓殑瀛楁鏁伴噺銆?/p>
Filter(榪囨護)錛氬湪WHERE浠庡彞涓Щ闄ょ敤鍒扮殑浠諱綍鍑芥暟錛屼笉瑕佸湪SQL璇彞涓寘鍚鍥撅紝鍙兘闇€瑕侀澶栫殑绱㈠紩銆?/p>
Sort(鎺掑簭)錛氭暟鎹槸鍚︾湡鐨勯渶瑕佹帓搴忥紵鍙惁浣跨敤绱㈠紩鏉ラ伩鍏嶆帓搴忥紵鍦ㄥ鎴風鎺掑簭鏄惁浼氭洿鍔犳湁鏁堢巼錛?/p>
鏌ョ湅SQL Server鍥懼艦鎵ц璁″垝鏃訛紝鍙互鏌ユ壘鐨勯潪甯告湁鐢ㄧ殑涓€涓笢瑗垮氨鏄煡璇紭鍖栧櫒濡備綍涓虹粰瀹氱殑鏌ヨ浣跨敤绱㈠紩鏉ヤ粠琛ㄤ腑鑾峰彇鏁版嵁銆傞€氳繃鏌ョ湅鏄惁鏈夌敤鍒扮儲寮曪紝浠ュ強绱㈠紩濡備綍琚嬌鐢紝閮芥湁鍔╀簬鍒ゆ柇褰撳墠鐨勭儲寮曟槸鍚︿嬌寰楁煡璇㈡墽琛屽緱灝藉彲鑳界殑蹇€?/p>
灝嗛紶鏍囩Щ鍒板浘褰㈡墽琛岃鍒掍笂鐨勮〃鍚?浠ュ強瀹冪殑鍥炬爣)涓婇潰錛屽氨浼氬脊鍑轟竴涓獥鍙o紝浠庡畠涓婇潰鍙互鐪嬪埌涓€浜涗俊鎭€傝繖浜涗俊鎭浣犵煡閬撴槸鍚︽湁鐢ㄥ埌绱㈠紩鏉ヤ粠琛ㄤ腑鑾峰彇鏁版嵁錛屼互鍙婂畠鏄浣曚嬌鐢ㄧ殑銆傝繖浜涗俊鎭寘鎷細
· Table Scan(琛ㄦ壂鎻?錛氬鏋滅湅鍒拌繖涓俊鎭紝灝辮鏄庢暟鎹〃涓婃病鏈夎仛闆嗙儲寮曪紝鎴栬€呮煡璇紭鍖栧櫒娌℃湁浣跨敤绱㈠紩鏉ユ煡鎵俱€傛剰鍗寵祫鏂欒〃鐨勬瘡涓€琛岄兘琚鏌ュ埌銆傚鏋滆祫鏂欒〃鐩稿杈冨皬鐨勮瘽錛岃〃鎵弿鍙互闈炲父蹇€燂紝鏈夋椂鐢氳嚦蹇繃浣跨敤绱㈠紩銆?/p>
鍥犳錛屽綋鐪嬪埌鏈夋墽琛岃〃鎵弿鏃訛紝絎竴浠惰鍋氱殑浜嬪氨鏄湅鐪嬫暟鎹〃鏈夊灝戞暟鎹銆傚鏋滀笉鏄お澶氱殑璇濓紝閭d箞琛ㄦ壂鎻忓彲鑳芥彁渚涗簡鏈€濂界殑鎬諱綋鏁堣兘銆備絾濡傛灉鏁版嵁琛ㄥぇ鐨勮瘽錛岃〃鎵弿灝辨瀬鍙兘闇€瑕侀暱鏃墮棿鏉ュ畬鎴愶紝鏌ヨ鏁堣兘灝卞ぇ鍙楀獎鍝嶃€傚湪榪欑鎯呭喌涓嬶紝灝遍渶瑕佷粩緇嗙爺絀訛紝涓烘暟鎹〃澧炲姞涓€涓€傚綋鐨勭儲寮曠敤浜庤繖涓煡璇€€?/p>
鍋囪浣犲彂鐜版煇鏌ヨ浣跨敤浜嗚〃鎵弿錛屾湁涓€涓悎閫傜殑闈炶仛闆嗙儲寮曪紝浣嗗畠娌℃湁鐢ㄥ埌銆傝繖鎰忓懗鐫€浠€涔堝憿錛熶負浠€涔堣繖涓儲寮曟病鏈夌敤鍒板憿錛熷鏋滈渶瑕佽幏寰楃殑鏁版嵁閲忕浉瀵規暟鎹〃澶у皬鏉ヨ闈炲父澶э紝鎴栬€呮暟鎹€夋嫨鎬т笉楂?鎰忓懗鐫€鍚屼竴涓瓧孌典腑閲嶅鐨勫€煎緢澶?錛岃〃鎵弿緇忓父浼氭瘮绱㈠紩鎵弿蹇€備緥濡傦紝濡傛灉涓€涓暟鎹〃鏈?0000涓暟鎹錛屾煡璇㈣繑鍥?000琛岋紝濡傛灉榪欎釜琛ㄦ病鏈夎仛闆嗙儲寮曠殑璇濓紝閭d箞琛ㄦ壂鎻忓皢姣斾嬌鐢ㄤ竴涓潪鑱氶泦绱㈠紩鏇村揩銆傛垨鑰呭鏋滄暟鎹〃鏈?0000涓暟鎹錛屼笖鍚屼竴涓瓧孌?WHERE鏉′歡鍙ユ湁鐢ㄥ埌榪欎釜瀛楁)涓婃湁1000絎旈噸澶嶇殑鏁版嵁錛岃〃鎵弿涔熶細姣斾嬌鐢ㄩ潪鑱氶泦绱㈠紩鏇村揩銆?/p>
鏌ョ湅鍥懼艦鎵ц璁″垝涓婄殑鏁版嵁琛ㄤ笂鐨勫脊鍑哄紡紿楀彛鏃訛紝璇鋒敞鎰?#8221;棰勪及鐨勮祫鏂欒鏁?Estimated Row Count)”銆傝繖涓暟瀛楁槸鏌ヨ浼樺寲鍣ㄤ綔鍑虹殑澶氬皯涓暟鎹浼氳榪斿洖鐨勬渶浣蟲帹嫻嬨€傚鏋滄墽琛屼簡琛ㄦ壂鎻忎笖”棰勪及鐨勬暟鎹鏁?#8221;鏁板€煎緢楂樼殑璇濓紝灝辨剰鍛崇潃榪斿洖鐨勮褰曟暟寰堝錛屾煡璇紭鍖栧櫒璁や負鎵ц琛ㄦ壂鎻忔瘮浣跨敤鍙敤鐨勯潪鑱氶泦绱㈠紩鏇村揩銆?/p>
· Index Seek(绱㈠紩鏌ユ壘)錛氱儲寮曟煡鎵炬剰鍛崇潃鏌ヨ浼樺寲鍣ㄤ嬌鐢ㄤ簡鏁版嵁琛ㄤ笂鐨勯潪鑱氶泦绱㈠紩鏉ユ煡鎵炬暟鎹€傛€ц兘閫氬父浼氬緢蹇紝灝ゅ叾鏄綋鍙湁灝戞暟鐨勬暟鎹琚繑鍥炴椂銆?/p>
· Clustered Index Seek(鑱氶泦绱㈠紩鏌ユ壘)錛氳繖鎸囨煡璇紭鍖栧櫒浣跨敤浜嗘暟鎹〃涓婄殑鑱氶泦绱㈠紩鏉ユ煡鎵炬暟鎹紝鎬ц兘寰堝揩銆傚疄闄呬笂錛岃繖鏄疭QL Server鑳藉仛鐨勬渶蹇殑绱㈠紩鏌ユ壘綾誨瀷銆?/p>
· Clustered Index Scan(鑱氶泦绱㈠紩鎵弿)錛氳仛闆嗙儲寮曟壂鎻忎笌琛ㄦ壂鎻忕浉浼鹼紝涓嶅悓鐨勬槸鑱氶泦绱㈠紩鎵弿鏄湪涓€涓緩鏈夎仛闆嗙儲寮曠殑鏁版嵁琛ㄤ笂鎵ц鐨勩€傚拰涓€鑸殑琛ㄦ壂鎻忎竴鏍鳳紝鑱氶泦绱㈠紩鎵弿鍙兘琛ㄦ槑瀛樺湪鏁堣兘闂銆備竴鑸潵璇達紝鏈変袱縐嶅師鍥犱細寮曟鑱氶泦绱㈠紩鎵弿鐨勬墽琛屻€傜涓€涓師鍥狅紝鐩稿浜庢暟鎹〃涓婄殑鏁翠綋鏁版嵁琛屾暟鐩紝鍙兘闇€瑕佽幏鍙栧お澶氱殑鏁版嵁琛屻€傛煡鐪?#8221;棰勪及鐨勬暟鎹鏁伴噺(Estimated Row Count)”鍙互瀵規鍔犱互楠岃瘉銆傜浜屼釜鍘熷洜錛屽彲鑳芥槸鐢變簬WHERE鏉′歡鍙ヤ腑鐢ㄥ埌鐨勫瓧孌甸€夋嫨鎬т笉楂樸€傚湪浠諱綍鎯呭喌涓嬶紝涓庢爣鍑嗙殑琛ㄦ壂鎻忎笉鍚岋紝鑱氶泦绱㈠紩鎵弿騫朵笉浼氭€繪槸鍘繪煡鎵炬暟鎹〃涓殑鎵€鏈夋暟鎹紝鎵€浠ヨ仛闆嗙儲寮曟壂鎻忎竴鑸兘浼氭瘮鏍囧噯鐨勮〃鎵弿瑕佸揩銆傞€氬父鏉ヨ錛岃灝嗚仛闆嗙儲寮曟壂鎻忔敼鎴愯仛闆嗙儲寮曟煡鎵撅紝浣犲敮涓€鑳藉仛鐨勬槸閲嶅啓鏌ヨ璇彞錛岃璇彞闄愬埗鎬ф洿澶氾紝浠庤€岃繑鍥炴洿灝戠殑鏁版嵁琛屻€?/p>
緇濆ぇ澶氭暟鎯呭喌涓嬶紝鏌ヨ浼樺寲鍣ㄤ細瀵硅繛鎺ヨ繘琛屽垎鏋愶紝鎸夋渶鏈夋晥鐜囩殑欏哄簭錛屼嬌鐢ㄦ渶鏈夋晥鐜囩殑榪炴帴綾誨瀷鏉ュ鏁版嵁琛ㄨ繘琛岃繛鎺ャ€備絾騫朵笉鎬繪槸濡傛銆傚湪鍥懼艦鎵ц璁″垝涓綘鍙互鐪嬪埌浠h〃鏌ヨ鎵€浣跨敤鍒扮殑鍚勭涓嶅悓榪炴帴綾誨瀷鐨勫浘鏍囥€傛澶栵紝姣忎釜榪炴帴鍥炬爣閮芥湁涓や釜綆ご鎸囧悜瀹冦€傛寚鍚戣繛鎺ュ浘鏍囩殑涓婇潰鐨勭澶翠唬琛ㄨ榪炴帴鐨勫閮ㄨ〃錛屼笅闈㈢殑綆ご鍒欎唬琛ㄨ繖涓繛鎺ョ殑鍐呴儴琛ㄣ€傜澶寸殑鍙︿竴澶村垯鎸囧悜琚繛鎺ョ殑鏁版嵁琛ㄥ悕銆?/p>
鏈夋椂鍦ㄥ琛ㄨ繛鎺ョ殑鏌ヨ涓紝綆ご鐨勫彟涓€澶存寚鍚戠殑騫朵笉鏄竴涓暟鎹〃錛岃€屾槸鍙︿竴涓繛鎺ャ€傚鏋滃皢榧犳爣縐誨埌鎸囧悜澶栭儴榪炴帴涓庡唴閮ㄨ繛鎺ョ殑綆ご涓婏紝灝卞彲浠ョ湅鍒頒竴涓脊鍑哄紡紿楀彛錛屽憡璇変綘鏈夊灝戞暟鎹琚彂閫佽嚦榪欎釜榪炴帴鏉ヨ繘琛屽鐞嗐€傚閮ㄨ〃搴旇鎬繪槸姣斿唴閮ㄨ〃鍚湁鏇村皯鐨勬暟鎹銆傚鏋滀笉鏄紝鍒欒鏄庢煡璇紭鍖栧櫒鎵€閫夋嫨鐨勮繛鎺ラ『搴忓彲鑳戒笉姝g‘(涓嬮潰鏄叧浜庤繖涓瘽棰樼殑鏇村淇℃伅)銆?/p>
棣栧厛錛岃鎴戜滑鏉ョ湅鐪嬭繛鎺ョ被鍨嬨€係QL Server鍙互浣跨敤涓夌涓嶅悓鐨勬妧鏈潵榪炴帴璧勬枡琛細宓屽寰幆(nested loop)錛屾暎鍒?hash)錛屼互鍙婂悎騫?merge)銆備竴鑸潵璇達紝宓屽寰幆鏄渶蹇殑榪炴帴綾誨瀷錛屼絾濡傛灉涓嶅彲鑳戒嬌鐢ㄥ祵濂楀驚鐜殑璇濓紝鍒欎細鐢ㄥ埌鏁e垪鎴栬€呭悎騫朵綔涓哄悎閫傜殑榪炴帴綾誨瀷銆備袱鑰呴兘姣斿祵濂楀驚鐜繛鎺ユ參銆?/p>
褰撹繛鎺ュぇ琛ㄦ椂錛屽垯鍚堝茍榪炴帴鍙兘鏄渶浣抽€夐」錛岃€岄潪宓屽寰幆榪炴帴銆傚敮涓€鐨勬槑紜繖涓€鐐圭殑鏂瑰紡鏄涓よ€呴兘榪涜嫻嬭瘯浠ユ煡鐪嬪摢涓€涓渶鏈夋晥鐜囥€?/p>
濡傛灉浣犳€€鐤戞煇涓煡璇㈤€熷害鎱㈢殑鍘熷洜鍙兘鏄洜涓哄畠鎵€浣跨敤鐨勮繛鎺ョ被鍨嬩笉鐞嗘兂錛岄偅涔堜綘鍙互浣跨敤榪炴帴鎻愮ず鏉ュ鐩栨煡璇紭鍖栧櫒鐨勯€夋嫨銆傚湪浣跨敤榪炴帴鎻愮ず涔嬪墠錛屼綘闇€瑕佽姳璐逛竴浜涙椂闂村幓浜嗚В涓€涓嬫瘡縐嶈繛鎺ョ被鍨嬩互鍙婂畠浠殑宸ヤ綔鏂瑰紡銆傝繖鏄竴涓鏉傜殑璇濋錛岃秴鍑轟簡鏈枃鐨勮璁鴻寖鍥淬€?/p>
鏌ヨ浼樺寲鍣ㄩ€夋嫨鏈€鏈夋晥鐜囩殑榪炴帴綾誨瀷鏉ヨ繛鎺ユ暟鎹〃銆備緥濡傦紝宓屽寰幆榪炴帴鐨勫閮ㄨ〃搴旇鏄繛鎺ョ殑涓や釜琛ㄤ腑杈冨皬鐨勯偅涓〃銆傛暎鍒楄繛鎺ヤ篃鏄竴鏍鳳紝瀹冪殑澶栭儴琛ㄥ簲璇ユ槸杈冨皬鐨勯偅涓〃銆傚鏋滀綘瑙夊緱鏌ヨ浼樺寲鍣ㄩ€夋嫨鐨勮繛鎺ラ『搴忔槸閿欒鐨勶紝鍙互浣跨敤榪炴帴鎻愮ず鏉ュ鐩栧畠銆?/p>
浣犲父甯鎬細鍦ㄥ浘褰㈡墽琛岃鍒掍笂鐪嬪埌鏍囪瘑鎴?#8221;涔︾鏌ユ壘(Bookmark Lookup)”鐨勫浘鏍囥€備功絳炬煡鎵劇浉褰撳父瑙併€備功絳炬煡鎵劇殑鏈川鏄憡璇変綘鏌ヨ澶勭悊鍣ㄥ繀欏諱粠鏁版嵁琛ㄦ垨鑰呰仛闆嗙儲寮曚腑鏉ユ煡鎵懼畠鎵€闇€瑕佺殑鏁版嵁琛岋紝鑰屼笉鏄粠闈炶仛闆嗙儲寮曚腑鐩存帴璇誨彇銆?/p>
鎵撴瘮鏂硅錛屽鏋滀竴涓煡璇㈣鍙ョ殑SELECT,JOIN浠ュ強WHERE瀛愬彞涓殑鎵€鏈夊瓧孌碉紝閮戒笉瀛樺湪浜庨偅涓敤鏉ュ畾浣嶇鍚堟煡璇㈡潯浠剁殑鏁版嵁琛岀殑闈炶仛闆嗙儲寮曚腑錛岄偅涔堟煡璇紭鍖栧櫒灝變笉寰椾笉鍋氶澶栫殑宸ヤ綔鍦ㄦ暟鎹〃鎴栬仛闆嗙儲寮曚腑鏌ユ壘閭d簺婊¤凍榪欎釜鏌ヨ璇彞鐨勫瓧孌點€?/p>
鍙︿竴縐嶅紩璧蜂功絳炬煡鎵劇殑鍘熷洜鏄嬌鐢ㄤ簡SELECT *銆傜敱浜庡湪緇濆ぇ澶氭儏鍐典笅瀹冧細榪斿洖姣斾綘瀹為檯鎵€闇€鏇村鐨勬暟鎹紝鎵€浠ュ簲璇ユ案涓嶄嬌鐢⊿ELECT *.
浠庢€ц兘鏂歸潰鏉ヨ錛屼功絳炬煡鎵炬槸涓嶇悊鎯崇殑銆傚洜涓哄畠浼氳姹傞澶栫殑I/O寮€閿€鍦ㄥ瓧孌典腑鏌ユ壘浠ヨ繑鍥炴墍闇€鐨勬暟鎹銆?/p>
濡傛灉璁や負涔︾鏌ユ壘闃茬浜嗘煡璇㈢殑鎬ц兘錛岄偅涔堟湁鍥涚閫夋嫨鍙互鐢ㄦ潵閬垮厤瀹冿細鍙互寤虹珛WHERE瀛愬彞浼氱敤鍒扮殑鑱氶泦绱㈠紩錛屽埄鐢ㄧ儲寮曚氦闆嗙殑浼樺娍錛屽緩绔嬭鐩栫殑闈炶仛闆嗙儲寮曪紝鎴栬€?濡傛灉鏄疭QL Server 2000/2005浼佷笟鐗堢殑璇?鍙互寤虹珛绱㈠紩瑙嗗浘銆傚鏋滆繖浜涢兘涓嶅彲鑳斤紝鎴栬€呬嬌鐢ㄥ畠浠腑鐨勪換浣曚竴涓兘浼氳€楃敤姣斾功絳炬煡鎵炬洿澶氱殑璧勬簮錛岄偅涔堜功絳炬煡鎵懼氨鏄渶浣崇殑閫夋嫨浜嗐€俒
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛歨ttp://blog.csdn.net/xiao_hn/archive/2009/06/11/4259628.aspx
鈶?span style="font: 7pt Times New Roman"> 閿?/strong>錛氭瘡鏉?/span>SQL璇彞
鈶?span style="font: 7pt Times New Roman"> 闅旂錛氫簨鍔?/span>
閿?/strong>
鈶?/span>
騫跺彂闂
涓㈠け鏇存柊
鏈‘璁ょ殑璇誨彇錛堣剰璇伙級
涓嶄竴鑷寸殑鍒嗘瀽錛堥潪閲嶅璇伙級錛氬嬈¤鍙栫浉鍚岀殑鏁版嵁錛堣錛変笉涓€鑷達紙鍏朵粬鐢ㄦ埛鏇存敼update錛?/span>
騫誨儚璇伙細澶氭璇誨彇鏈変笉瀛樺湪鍜屾柊澧炵殑鏁版嵁錛堝叾浠栫敤鎴鋒彃鍏?/span>insert鎴栧垹闄?/span>delete錛?/span>
闅旂綰у埆
闅旂綰у埆 |
鑴忚 |
涓嶅彲閲嶅璇誨彇 |
騫誨儚 |
璇存槑 |
鏈彁浜よ(read uncommitted) |
鏄?/span> |
鏄?/span> |
鏄?/span> |
濡傛灉鍏朵粬浜嬪姟鏇存柊錛屼笉綆℃槸鍚︽彁浜わ紝绔嬪嵆鎵ц |
鎻愪氦璇?span>(read committed榛樿) |
鍚?/span> |
鏄?/span> |
鏄?/span> |
璇誨彇鎻愪氦榪囩殑鏁版嵁銆傚鏋滃叾浠栦簨鍔℃洿鏂版病鎻愪氦錛屽垯絳夊緟 |
鍙噸澶嶈(repeatable read) |
鍚?/span> |
鍚?/span> |
鏄?/span> |
鏌ヨ鏈熼棿錛屼笉鍏佽鍏朵粬浜嬪姟update |
鍙覆琛岃(serializable) |
鍚?/span> |
鍚?/span> |
鍚?/span> |
鏌ヨ鏈熼棿錛屼笉鍏佽鍏朵粬浜嬪姟insert鎴杁elete |
鎻愪氦璇?/span>
鍋囪瀛樺湪琛?/span>A錛屽涓嬫墍紺?/span>
A1 |
A2 |
A3 |
11 |
21 |
31 |
12 |
22 |
32 |
鎵撳紑鏌ヨ鍒嗘瀽鍣ㄥ茍鎵撳紑涓や釜榪炴帴錛屽垎鍒緭鍏ュ涓嬩袱涓簨鍔★細
--浜嬪姟鈪?/span>
SET TRANSACTION ISOLATION LEVEL READ Committed
begin tran
update A set A2 = 20 where A1 = 11
waitfor delay '00:
rollback tran
--浜嬪姟鈪?/span>
SET TRANSACTION ISOLATION LEVEL READ Committed
select * from A where A1 = 11
濡傛灉鍏堣繍琛屼簨鍔♀厾錛岀劧鍚庣揣鎺ョ潃榪愯浜嬪姟鈪★紝鍒欎簨鍔♀叀瑕佺瓑寰?/span>10縐掗挓錛?/span>涓€涓繛鎺ュ湪淇敼鏁版嵁鍧楁椂鍒殑榪炴帴涔熶笉鑳芥煡璇㈣繖涓暟鎹潡錛岀洿鍒拌В閿?/strong>銆傚弽涔嬩害鐒訛細璇葷殑鏃跺€欎笉鑳藉啓鍜屼慨鏀?/span>錛夈€?/span>
濡傛灉鎶婁簨鍔♀叀鏀逛負濡備笅
SET TRANSACTION ISOLATION LEVEL READ UNCommitted
select * from A where A1 = 11
閭d箞浜嬪姟鈪′笉闇€絳夊緟錛岀珛鍗蟲墽琛岋紙鍙互鐪嬪嚭READ UNCommitted浜嬪姟select涓嶅鏁版嵁鍙戝嚭鍏變韓閿?/strong>錛?/span>
閿?/strong>錛?/span>(榪欓噷涓昏璁茶В 鍏變韓閿?/strong> 鍜?/span> 鎺掍粬閿?/strong> 涓ょ緇忓父鐢ㄥ埌鐨?strong style="background-color: #99ff99; color: black">閿?/strong>)
鍏變韓閿?/strong>涓昏鏄負浜嗗叡浜錛?/span>select錛夛紝濡傛灉瀛樺湪浜嬪姟錛堜竴涓垨澶氫釜錛夋嫢鏈夊琛ㄤ腑鏁版嵁錛堝叧浜?strong style="background-color: #99ff99; color: black">閿?/strong>鏁版嵁鐨勫灝戯紝瑙?strong style="background-color: #99ff99; color: black">閿?/strong>鐨勭矑搴﹁€屽畾錛夌殑鍏變韓閿?/strong>錛屼笉鍏佽瀵?strong style="background-color: #99ff99; color: black">閿?/strong>瀹氱殑鏁版嵁榪涜鏇存柊(update)錛堜粠閿?/strong>鐨勮搴﹁錛屽嵆涓嶅厑璁鎬簨鍔¤幏鍙栨帓浠?strong style="background-color: #99ff99; color: black">閿?/strong>錛岃絳夊埌鎵€鏈夌殑鍏變韓閿?/strong>閮介噴鏀炬帀錛夈€傚弽涔嬶紝濡傛灉浜嬪姟瀵規暟鎹凡緇忓叿鏈夋帓浠?strong style="background-color: #99ff99; color: black">閿?/strong>錛堝彧鑳芥湁涓€涓級錛屽叾浠栫殑浜嬪姟灝變笉鑳藉閿?/strong>瀹氱殑鏁版嵁鑾峰彇鍏變韓閿?/strong>鍜屾帓浠?strong style="background-color: #99ff99; color: black">閿?/strong>錛堝嵆鎺掍粬閿?/strong>涓庡叡浜?strong style="background-color: #99ff99; color: black">閿?/strong>涓嶈兘鍏煎錛屾洿澶氫俊鎭鏌ョ湅閿?/strong>鍏煎鎬?/span>錛夛紝鍦ㄦ鐗瑰埆寮鴻皟涓€涓?/span> 閿?/strong>瀹氱殑鏁版嵁 錛屽洜涓烘湁鐨勮祫鏂欎笂璁茶В鍒?/span>“涓€涓繛鎺ュ啓鐨勬椂鍊欙紝鍙︿竴涓繛鎺ュ彲浠ュ啓”錛屽疄闄呬笂鍐欑殑榪欑鎯呭喌鏄悇涓繛鎺ョ殑璇誨啓鐨勬暟鎹笉鏄浉鍚岀殑琛岋紝涔熷氨鏄鍚勪釜榪炴帴閿?/strong>瀹氱殑鏁版嵁涓嶅悓銆?/span>
鏍規嵁浠ヤ笂鍒嗘瀽錛屾垜浠€葷粨涓哄叚涓瓧涓?#8220;鍏變韓璇伙紝鎺掍粬鍐?/span>”銆?/span>
浜嗚В浜?strong style="background-color: #99ff99; color: black">閿?/strong>鐨勬儏鍐典箣鍚庯紝鍙堟秹鍙婂埌涓€涓棶棰樸€備簨鍔$┒绔熻淇濇寔閿?/strong>澶氫箙鍛?/span>?
涓€鑸潵璇達紝鍏變韓閿?/strong>鐨?strong style="background-color: #99ff99; color: black">閿?/strong>瀹氭椂闂翠笌浜嬪姟鐨?strong style="background-color: #ffff66; color: black">闅旂綰у埆鏈夊叧錛屽鏋?strong style="background-color: #ffff66; color: black">闅旂綰у埆涓?/span>Read Committed鐨勯粯璁ょ駭鍒紝鍙湪璇誨彇(select)鐨勬湡闂翠繚鎸?strong style="background-color: #99ff99; color: black">閿?/strong>瀹氾紝鍗沖湪鏌ヨ鍑烘暟鎹互鍚庡氨閲婃斁浜?strong style="background-color: #99ff99; color: black">閿?/strong>錛涘鏋?strong style="background-color: #ffff66; color: black">闅旂綰у埆涓烘洿楂樼殑Repeatable read鎴?/span>Serializable錛岀洿鍒頒簨鍔$粨鏉熸墠閲婃斁閿?/strong>銆傚彟璇存槑錛屽鏋?/span>select璇彞涓寚瀹氫簡HoldLock鎻愮ず錛屽垯涔熻絳夊埌浜嬪姟緇撴潫鎵嶉噴鏀?strong style="background-color: #99ff99; color: black">閿?/strong>銆?/span>
鎺掍粬閿?/strong>鐩村埌浜嬪姟緇撴潫鎵嶉噴鏀俱€?/span>
鍋氬嚭浜嗕互涓婂垎鏋愶紝鐜板湪鎴戜滑鍙兘浼氬瓨鍦ㄨ繖鏍風殑鐤戦棶錛屽埌搴曞湪鎵цSQL璇彞鐨勬椂鍊欏彂鍑轟粈涔堟牱鐨?strong style="background-color: #99ff99; color: black">閿?/strong>鍛紝榪欏氨鐢變簨鍔$殑闅旂綰у埆鍐沖畾浜嗐€備竴鑸儏鍐碉紝璇昏鍙?/span>(select)鍙戝嚭鍏變韓閿?/strong>錛屽啓璇彞(update,insert,delete)鍙戝嚭鎺掍粬閿?/strong>銆備絾鏄紝濡傛灉榪欐牱涓嶈兘婊¤凍鎴戜滑鐨勮姹傛€庝箞鍔炲憿錛屾湁娌℃湁鏇村閫夋嫨鍛紝鍒€ワ紝SQLserver涓烘垜浠彁渚涗簡閿?/strong>瀹氭彁紺虹殑姒傚康銆?/span>
閿?/strong>瀹氭彁紺哄SQL璇彞榪涜鐗瑰埆鎸囧畾錛岃繖涓寚瀹氬皢瑕嗙洊浜嬪姟鐨?strong style="background-color: #ffff66; color: black">闅旂綰у埆銆備笅闈㈠鍚勪釜閿?/strong>瀹氭彁紺哄垎鍒簣浠ヤ粙緇嶏紙鏇村璧勬枡璇鋒煡鐪?/span>SQLserver鐨勮仈鏈哄府鍔╋級錛岀瑪鑰呭仛鍑轟簡浠ヤ笅鍒嗙被銆?/span>
綾誨瀷1
鈶?span style="font: 7pt Times New Roman"> READUNCOMMITTED錛氫笉鍙戝嚭閿?/strong>
鈶?span style="font: 7pt Times New Roman"> READCOMMITTED錛氬彂鍑哄叡浜?strong style="background-color: #99ff99; color: black">閿?/strong>錛屼繚鎸佸埌璇誨彇緇撴潫
鈶?span style="font: 7pt Times New Roman"> REPEATABLEREAD錛氬彂鍑哄叡浜?strong style="background-color: #99ff99; color: black">閿?/strong>錛屼繚鎸佸埌浜嬪姟緇撴潫
鈶?span style="font: 7pt Times New Roman"> SERIALIZABLE錛氬彂鍑哄叡浜?strong style="background-color: #99ff99; color: black">閿?/strong>錛屼繚鎸佸埌浜嬪姟緇撴潫
綾誨瀷2
鈶?span style="font: 7pt Times New Roman"> NOLOCK錛氫笉鍙戝嚭閿?/strong>銆傜瓑鍚屼簬READUNCOMMITTED
鈶?span style="font: 7pt Times New Roman"> HOLDLOCK錛氬彂鍑哄叡浜?strong style="background-color: #99ff99; color: black">閿?/strong>錛屼繚鎸佸埌浜嬪姟緇撴潫銆傜瓑鍚屼簬SERIALIZABLE
鈶?span style="font: 7pt Times New Roman"> XLOCK錛氬彂鍑烘帓浠?strong style="background-color: #99ff99; color: black">閿?/strong>錛屼繚鎸佸埌浜嬪姟緇撴潫銆?/span>
鈶?span style="font: 7pt Times New Roman"> UPDLOCK錛氬彂鍑烘洿鏂?strong style="background-color: #99ff99; color: black">閿?/strong>錛屼繚鎸佸埌浜嬪姟浜嬪姟緇撴潫銆傦紙鏇存柊閿?/strong>錛氫笉闃誨鍒殑浜嬬墿錛屽厑璁稿埆鐨勪簨鐗╄鏁版嵁錛堝嵆鏇存柊閿?/strong>鍙笌鍏變韓閿?/strong>鍏煎錛夛紝浣嗕粬紜繚鑷笂嬈¤鍙栨暟鎹悗鏁版嵁娌℃湁琚洿鏂?/span>錛?/span>
鈶?span style="font: 7pt Times New Roman"> READPAST錛氬彂鍑哄叡浜?strong style="background-color: #99ff99; color: black">閿?/strong>錛屼絾璺寵繃閿?/strong>瀹氳錛屽畠涓嶄細琚樆濉炪€?span style="color: red">閫傜敤鏉′歡錛氭彁浜よ鐨?strong style="background-color: #ffff66; color: black">闅旂綰у埆錛岃綰?strong style="background-color: #99ff99; color: black">閿?/strong>錛?/span>select璇彞涓€?/span>
綾誨瀷3
鈶?span style="font: 7pt Times New Roman"> ROWLOCK錛氳綰?strong style="background-color: #99ff99; color: black">閿?/strong>
鈶?span style="font: 7pt Times New Roman"> PAGLOCK錛氶〉綰?strong style="background-color: #99ff99; color: black">閿?/strong>
鈶?span style="font: 7pt Times New Roman"> TABLOCK錛氳〃閿?/strong>
鈶?span style="font: 7pt Times New Roman"> TABLOCKX錛氳〃鎺掍粬閿?/strong>
璁茶В瀹?strong style="background-color: #99ff99; color: black">閿?/strong>鍚庯紝涓嬮潰緇撳悎涓€涓叿浣撳疄渚嬶紝鍏蜂綋鐪嬩竴涓?strong style="background-color: #99ff99; color: black">閿?/strong>鐨勪嬌鐢ㄣ€?/span>
鍦ㄥ緢澶氱郴緇熶腑錛岀粡甯鎬細閬囧埌榪欑鎯呭喌錛岃淇濇寔涓€涓紪鍙風殑鍞竴錛屽浼氳杞歡涓殑鍑瘉鐨勭紪鍙楓€備竴縐嶇紪鍙風殑澶勭悊鏄繖鏍風殑錛屾妸琛ㄤ腑鐨勬渶澶х紪鍙蜂繚瀛樺埌琛ㄤ腑錛岀劧鍚庡湪榪欎釜緙栧彿涓婄瘡鍔狅紝褰㈡垚鏂扮殑緙栧彿銆傝繖涓繃紼嬪騫跺彂澶勭悊瑕佹眰闈炲父楂橈紝涓嬮潰鎴戜滑灝辨潵妯℃嫙榪欎釜榪囩▼錛岀湅濡備綍淇濇寔緙栧彿鐨勫敮涓€鎬с€?/span>
鏂板緩涓€寮犺〃code鏉ヤ繚瀛樺嚟璇佺殑鏈€澶х紪鍙楓€傚瓧孌靛涓嬶細緙栧彿:bh(numeric(18,0)),鍑瘉琛ㄥ悕pinzheng(varchar(50))
鍋囪琛ㄤ腑鏈夎繖鏍風殑涓€鏉¤褰曪細
Bh |
Pinzheng |
18000 |
浼氳鍑瘉 |
鏂板緩涓€涓瓨鍌ㄨ繃紼嬫潵鐢熸垚鏂扮殑鍑瘉緙栧彿錛屽涓嬶細
CREATE PROCEDURE up_getbh AS
Begin Tran
Declare @numnewbh numeric(18,0)
select @numnewbh = bh FROM code WITH (UPDLOCK,ROWLOCK) where pinzheng = '浼氳鍑瘉'
set @numnewbh = @numnewbh + 1
update code set bh = @numnewbh where pinzheng = '浼氳鍑瘉'
print @numnewbh
Commit tran
GO
鐒跺悗錛屾墦寮€鏌ヨ鍒嗘瀽鍣紝騫跺寮€鍑犱釜榪炴帴錛堢瑪鑰呭紑浜?/span>8涓繛鎺ワ紝妯℃嫙鏈?/span>8涓漢鍚屾椂騫跺彂錛岃鑰呭彲浠ュ紑鏇村鐨勮繛鎺ヨ繘琛岃瘯楠岋級錛屾妸綾諱技浠ヤ笅榪欐牱鐨勮鍙ュ鍒跺埌姣忎釜榪炴帴紿楀彛涓紝
declare @i numeric(18,0)
set @i = 1
while @i = 1
Begin
if getdate() > '2004-07-22 14:23' --璁懼畾涓€涓椂闂達紝鍒版鏃墮棿鍚屾椂鎵цupgetbh瀛樺偍榪囩▼
set @i = 0
end
exec up_getbh
鐒跺悗錛屾帴榪炶繍琛屽悇涓繛鎺ワ紝鍒?/span>2004-7-22 14錛?/span>23 榪欎竴鍒伙紝鍚勪釜榪炴帴鍚屾椂榪愯up_getbh銆備粠榪愯緇撴灉鍙互鐪嬪嚭榪炴帴欏哄簭鍑虹幇18001寮€濮嬩釜鏁板瓧錛屽茍娌℃湁閲嶅彿鎴栦涪鍙風殑鐜拌薄銆?/span>
鍒嗘瀽錛氱敱浜?/span>up_getbh涓殑select璇彞浣跨敤浜嗘洿鏂?strong style="background-color: #99ff99; color: black">閿?/strong>錛屽洜鏇存柊閿?/strong>涔嬮棿涓嶈兘鍏煎錛屾墍浠ュ悇涓繛鎺ヨ絳夊埌鎵€鏈夊叾浠栫殑榪炴帴閲婃斁鎺?strong style="background-color: #99ff99; color: black">閿?/strong>鎵嶈兘鎵ц錛岃€屾洿鏂?strong style="background-color: #99ff99; color: black">閿?/strong>鐨勯噴鏀捐絳夊埌浜嬪姟緇撴潫錛岃繖鏍峰氨涓嶄細鍙戠敓鍙峰嚭閿欑殑鐜拌薄浜嗐€?/span>
瀵逛簬Oracle鐨勪竴浜涘熀鏈煡璇嗚鍔犲己瀛︿範錛屾垜浠庣綉涓婃妱浜嗕笁涓漢瀵硅繖涓鐩殑瑙佽В涓嬫潵錛屼緵宸插弬鑰冦€?/font>
NESTED LOOP:
瀵逛簬琚繛鎺ョ殑鏁版嵁瀛愰泦杈冨皬鐨勬儏鍐碉紝宓屽寰幆榪炴帴鏄釜杈冨ソ鐨勯€夋嫨銆傚湪宓屽寰幆涓紝鍐?br /> 琛ㄨ澶栬〃椹卞姩錛屽琛ㄨ繑鍥炵殑姣忎竴琛岄兘瑕佸湪鍐呰〃涓绱㈡壘鍒頒笌瀹冨尮閰嶇殑琛岋紝鍥犳鏁翠釜鏌ヨ榪斿洖 鐨勭粨鏋滈泦涓嶈兘澶ぇ錛堝ぇ浜? 涓囦笉閫傚悎錛夛紝瑕佹妸榪斿洖瀛愰泦杈冨皬琛ㄧ殑浣滀負澶栬〃錛圕BO 榛樿澶栬〃鏄?br /> 椹卞姩琛級錛岃€屼笖鍦ㄥ唴琛ㄧ殑榪炴帴瀛楁涓婁竴瀹氳鏈夌儲寮曘€傚綋鐒朵篃鍙互鐢∣RDERED 鎻愮ず鏉ユ敼鍙楥BO 榛樿鐨勯┍鍔ㄨ〃錛屼嬌鐢║SE_NL(table_name1 table_name2)鍙槸寮哄埗CBO 鎵ц宓屽寰幆榪炴帴銆?br /> HASH JOIN : 鏁e垪榪炴帴鏄疌BO 鍋氬ぇ鏁版嵁闆嗚繛鎺ユ椂鐨勫父鐢ㄦ柟寮忥紝浼樺寲鍣ㄤ嬌鐢ㄤ袱涓〃涓緝灝忕殑琛紙鎴栨暟鎹?br /> 婧愶級鍒╃敤榪炴帴閿湪鍐呭瓨涓緩绔嬫暎鍒楄〃錛岀劧鍚庢壂鎻忚緝澶х殑琛ㄥ茍鎺㈡祴鏁e垪琛紝鎵懼嚭涓庢暎鍒楄〃鍖歸厤 鐨勮銆?br /> 榪欑鏂瑰紡閫傜敤浜庤緝灝忕殑琛ㄥ畬鍏ㄥ彲浠ユ斁浜庡唴瀛樹腑鐨勬儏鍐碉紝榪欐牱鎬繪垚鏈氨鏄闂袱涓〃鐨勬垚 鏈箣鍜屻€備絾鏄湪琛ㄥ緢澶х殑鎯呭喌涓嬪茍涓嶈兘瀹屽叏鏀懼叆鍐呭瓨錛岃繖鏃朵紭鍖栧櫒浼氬皢瀹冨垎鍓叉垚鑻ュ共涓嶅悓鐨?br /> 鍒嗗尯錛屼笉鑳芥斁鍏ュ唴瀛樼殑閮ㄥ垎灝辨妸璇ュ垎鍖哄啓鍏ョ鐩樼殑涓存椂孌碉紝姝ゆ椂瑕佹湁杈冨ぇ鐨勪復鏃舵浠庤€屽敖閲?br /> 鎻愰珮I/O 鐨勬€ц兘銆?br /> 涔熷彲浠ョ敤USE_HASH(table_name1 table_name2)鎻愮ず鏉ュ己鍒朵嬌鐢ㄦ暎鍒楄繛鎺ャ€傚鏋滀嬌鐢ㄦ暎 鍒楄繛鎺ASH_AREA_SIZE 鍒濆鍖栧弬鏁板繀欏昏凍澶熺殑澶э紝濡傛灉鏄?i錛孫racle寤鴻浣跨敤SQL宸ヤ綔鍖?br /> 鑷姩綆$悊錛岃緗甒ORKAREA_SIZE_POLICY 涓篈UTO錛岀劧鍚庤皟鏁碢GA_AGGREGATE_TARGET 鍗沖彲銆?br /> 鎺掑簭鍚堝茍榪炴帴 閫氬父鎯呭喌涓嬫暎鍒楄繛鎺ョ殑鏁堟灉閮芥瘮鎺掑簭鍚堝茍榪炴帴瑕佸ソ錛岀劧鑰屽鏋滆婧愬凡緇忚鎺掕繃搴忥紝鍦ㄦ墽 琛屾帓搴忓悎騫惰繛鎺ユ椂涓嶉渶瑕佸啀鎺掑簭浜嗭紝榪欐椂鎺掑簭鍚堝茍榪炴帴鐨勬€ц兘浼氫紭浜庢暎鍒楄繛鎺ャ€傚彲浠ヤ嬌鐢?br /> USE_MERGE(table_name1 table_name2)鏉ュ己鍒朵嬌鐢ㄦ帓搴忓悎騫惰繛鎺?/div> Nested loop join:
姝ラ錛氱‘瀹氫竴涓┍鍔ㄨ〃(outer table)錛屽彟涓€涓〃涓篿nner table錛岄┍鍔ㄨ〃涓殑姣忎竴琛屼笌inner琛ㄤ腑鐨勭浉搴旇褰旿OIN銆傜被浼間竴涓祵濂楃殑寰幆銆傞€傜敤浜庨┍鍔ㄨ〃鐨勮褰曢泦姣旇緝灝忥紙<10000錛夎€屼笖inner琛ㄩ渶瑕佹湁鏈夋晥鐨勮闂柟娉曪紙Index錛夈€傞渶瑕佹敞鎰忕殑鏄細JOIN鐨勯『搴忓緢閲嶈錛岄┍鍔ㄨ〃鐨勮褰曢泦涓€瀹氳灝忥紝榪斿洖緇撴灉闆嗙殑鍝嶅簲鏃墮棿鏄渶蹇殑銆?br /> cost = outer access cost + (inner access cost * outer cardinality) | 2 | NESTED LOOPS | | 3 | 141 | 7 (15)| | 3 | TABLE ACCESS FULL | EMPLOYEES | 3 | 60 | 4 (25)| | 4 | TABLE ACCESS BY INDEX ROWID| JOBS | 19 | 513 | 2 (50)| | 5 | INDEX UNIQUE SCAN | JOB_ID_PK | 1 | | | EMPLOYEES涓簅uter table, JOBS涓篿nner table. Hash join 姝ラ錛氬皢涓や釜琛ㄤ腑杈冨皬鐨勪竴涓湪鍐呭瓨涓瀯閫犱竴涓狧ASH琛紙瀵笿OIN KEY錛夛紝鎵弿鍙︿竴涓〃錛屽悓鏍峰JOIN KEY榪涜HASH鍚庢帰嫻嬫槸鍚﹀彲浠OIN銆傞€傜敤浜庤褰曢泦姣旇緝澶х殑鎯呭喌銆傞渶瑕佹敞鎰忕殑鏄細濡傛灉HASH琛ㄥお澶э紝鏃犳硶涓€嬈℃瀯閫犲湪鍐呭瓨涓紝鍒欏垎鎴愯嫢騫蹭釜partition錛屽啓鍏ョ鐩樼殑temporary segment錛屽垯浼氬涓€涓啓鐨勪唬浠鳳紝浼氶檷浣庢晥鐜囥€?br /> cost = (outer access cost * # of hash partitions) + inner access cost -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 665 | 13300 | 8 (25)| | 1 | HASH JOIN | | 665 | 13300 | 8 (25)| | 2 | TABLE ACCESS FULL | ORDERS | 105 | 840 | 4 (25)| | 3 | TABLE ACCESS FULL | ORDER_ITEMS | 665 | 7980 | 4 (25)| -------------------------------------------------------------------------- ORDERS涓篐ASH TABLE錛孫RDER_ITEMS鎵弿 Sort merge join 姝ラ錛氬皢涓や釜琛ㄦ帓搴忥紝鐒跺悗灝嗕袱涓〃鍚堝茍銆傞€氬父鎯呭喌涓嬶紝鍙湁鍦ㄤ互涓嬫儏鍐靛彂鐢熸椂錛屾墠浼氫嬌鐢ㄦ縐岼OIN鏂瑰紡錛?br /> 1.RBO妯″紡 2.涓嶇瓑浠峰叧鑱?>,<,>=,<=,<>) 3.HASH_JOIN_ENABLED=false 4.鏁版嵁婧愬凡鎺掑簭 cost = (outer access cost * # of hash partitions) + inner access cost 杞澆biti鐨勪竴孌佃瘽:
涓句緥錛岃〃榪炴帴榪斿洖涓€鏉¤褰? 瀛樺湪涓や釜琛紝涓€涓? 10鏉¤褰? 錛屼竴涓?000涓囨潯璁板綍 鑻?琛ㄩ兘瀛樺湪榪炴帴瀛楁绱㈠紩錛岃嫢浠ュ皬琛ㄤ負椹卞姩琛紝鍒? 浠d環錛? 10* (閫氳繃绱㈠紩鍦ㄥぇ琛ㄦ煡璇竴鏉¤褰曠殑浠d環) 鑻ヤ互澶ц〃涓洪┍鍔ㄨ〃錛? 1000涓? * (閫氳繃绱㈠紩鍦ㄥ皬琛ㄤ腑鏌ヨ涓€鏉¤褰曠殑浠d環) 閫氳繃绱㈠紩鑾峰彇涓€鏉¤褰曪紝10rows鐨勮〃錛屼唬浠烽€氬父鍦? 3 blocks 绱㈠紩2鍧楋紝琛ㄤ竴鍧? 鑰屽鏋滄槸1000涓囩殑琛紝绱㈠紩鍙兘杈懼埌4鍧楄〃涓€鍧? 榪欐牱涓€鏉ュ弬鑰冧笂闈㈢殑璁$畻錛屼綘璇村摢涓洿濂斤紵寰堟樉鐒訛紒 灝忚〃鏌ヨ鍙傝€? SQL> create table test as select * from all_objects where rownum < 11; Table created. SQL> create index test_index on test(object_id); Index created. SQL> select object_id from test; OBJECT_ID ---------- 18159 7781 4841 19891 22549 17099 17712 4287 10107 19135 10 rows selected. Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (FULL) OF 'TEST' Statistics ---------------------------------------------------------- 0 recursive calls 12 db block gets 6 consistent gets 0 physical reads 0 redo size 736 bytes sent via SQL*Net to client 425 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 10 rows processed SQL> select * from test where object_id = 4287; OWNER OBJECT_NAME ------------------------------ ------------------------------ SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE ------------------------------ ---------- -------------- ------------------ CREATED LAST_DDL_ TIMESTAMP STATUS T G S --------- --------- ------------------- ------- - - - SYS /1033c8a_SqlTypeWithMethods 4287 JAVA CLASS 14-NOV-00 03-JUL-03 2003-07-03:11:18:19 INVALID N N N Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' 2 1 INDEX (RANGE SCAN) OF 'TEST_INDEX' (NON-UNIQUE) Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 3 consistent gets 0 physical reads 0 redo size 1157 bytes sent via SQL*Net to client 425 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed |
浣曡皳“鎸佷箙灞?#8221;
鎸佷箙灞傦紙Persistence Layer錛夛紝鍗充笓娉ㄤ簬瀹炵幇鏁版嵁鎸佷箙鍖栧簲鐢ㄩ鍩熺殑鏌愪釜鐗瑰畾緋葷粺鐨勪竴涓€昏緫灞傞潰錛屽皢鏁版嵁浣跨敤鑰呭拰鏁版嵁瀹炰綋鐩稿叧鑱斻€?/p>
浣曡皳“瀵硅薄鏁版嵁鏄犲皠錛圤RM錛?#8221;
ORM-Object/Relational Mapper錛屽嵆“瀵硅薄-鍏崇郴鍨嬫暟鎹槧灝勭粍浠?#8221;銆傚浜嶰/R錛屽嵆 Object錛堝璞★級鍜?Relational錛堝叧緋誨瀷鏁版嵁錛夛紝琛ㄧず蹇呴』鍚屾椂浣跨敤闈㈠悜瀵硅薄鍜屽叧緋誨瀷鏁版嵁榪涜寮€鍙戙€?/p>
澶囨敞錛氬緩妯¢鍩熶腑鐨?ORM 涓?Object/Role Modeling錛堝璞¤鑹插緩妯★級銆傚彟澶栬繖閲屾槸“O/R Mapper”鑰岄潪“O/R Mapping”銆傜浉瀵規潵璁詫紝O/R Mapping 鎻忚堪鐨勬槸涓€縐嶈璁℃€濇兂鎴栬€呭疄鐜版満鍒訛紝鑰?O/R Mapper鎸囦互O/R鍘熺悊璁捐鐨勬寔涔呭寲妗嗘灦錛團ramework錛夛紝鍖呮嫭 O/R鏈哄埗榪樻湁 SQL鑷敓鎴愶紝浜嬪姟澶勭悊錛孋ache綆$悊絳夈€?/p>
闄や簡 ORM 鎶€鏈紝榪樻湁浠ヤ笅鍑犵鎸佷箙鍖栨妧鏈?/p>
涓誨姩鍩熷璞℃ā寮?br /> 瀹冩槸鍦ㄥ疄鐜頒腑灝佽浜嗗叧緋繪暟鎹ā鍨嬪拰鏁版嵁璁塊棶緇嗚妭鐨勪竴縐嶅艦寮忋€傚湪 J2EE 鏋舵瀯涓紝EJB 緇勪歡鍒嗕負浼氳瘽 EJB 鍜屽疄浣?EJB銆備細璇?EJB 閫氬父瀹炵幇涓氬姟閫昏緫錛岃€屽疄浣?EJB 琛ㄧず涓氬姟瀹炰綋銆傚疄浣?EJB 鍙堝垎涓轟袱縐嶏細鐢?EJB 鏈韓綆$悊鎸佷箙鍖栵紝鍗?BMP錛圔ean-Managed Persistence錛夛紱鏈?EJB 瀹瑰櫒綆$悊鎸佷箙鍖栵紝鍗?CMP錛圕ontainer-Managed Persistence錛夈€侭M P灝辨槸涓誨姩鍩熷璞℃ā寮忕殑涓€涓緥瀛愶紝BMP 琛ㄧず鐢卞疄浣?EJB 鑷韓綆$悊鏁版嵁璁塊棶緇嗚妭銆?br /> 涓誨姩鍩熷璞℃湰韜綅浜庝笟鍔¢€昏緫灞傦紝鍥犳閲囩敤涓誨姩鍩熷璞℃ā寮忔椂錛屾暣涓簲鐢ㄤ粛鐒舵槸涓夊眰搴旂敤緇撴瀯錛屽茍娌℃湁浠庝笟鍔¢€昏緫灞傚垎紱誨嚭鐙珛鐨勬寔涔呭寲灞傘€?/p>
JDO 妯″紡
Java Data Objects錛圝DO錛夋槸 SUN 鍏徃鍒跺畾鐨勬弿榪板璞℃寔涔呭寲璇箟鐨勬爣鍑咥PI銆備弗鏍肩殑璇達紝JDO 騫朵笉鏄璞?鍏崇郴鏄犲皠鎺ュ彛錛屽洜涓哄畠鏀寔鎶婂璞℃寔涔呭寲鍒頒換鎰忎竴縐嶅瓨鍌ㄧ郴緇熶腑錛屽寘鎷?鍏崇郴鏁版嵁搴撱€侀潰鍚戝璞$殑鏁版嵁搴撱€佸熀浜?XML 鐨勬暟鎹簱錛屼互鍙婂叾浠栦笓鏈夊瓨鍌ㄧ郴緇熴€傜敱浜庡叧緋繪暟鎹簱鏄洰鍓嶆渶嫻佽鐨勫瓨鍌ㄧ郴緇燂紝璁稿 JDO 鐨勫疄鐜伴兘鍖呭惈浜嗗璞?鍏崇郴鏄犲皠鏈嶅姟銆?/p>
CMP 妯″紡
鍦?J2EE 鏋舵瀯涓紝CMP錛圕ontainer-Managed Persistence錛夎〃紺虹敱 EJB 瀹瑰櫒鏉ョ鐞嗗疄浣?EJB 鐨勬寔涔呭寲錛孍JB 瀹瑰櫒灝佽浜嗗璞?鍏崇郴鐨勬槧灝勫強鏁版嵁璁塊棶緇嗚妭銆侰MP 鍜?ORM 鐨勭浉浼間箣澶勫湪浜庯紝涓よ€呴兘鎻愪緵瀵硅薄-鍏崇郴鏄犲皠鏈嶅姟錛岄兘鎶婂璞℃寔涔呭寲鐨勪換鍔′粠涓氬姟閫昏緫涓垎紱誨嚭鏉ャ€傚尯鍒湪浜?CMP 璐熻矗鎸佷箙鍖栧疄浣?EJB 緇勪歡錛岃€?ORM 璐熻矗鎸佷箙鍖?POJO錛屽畠鏄櫘閫氱殑鍩轟簬 Java Bean 褰㈠紡鐨勫疄浣撳煙瀵硅薄銆?/p>
涓€鑸妸鍩轟簬 Java Bean 褰㈠紡鐨勫疄浣撳煙瀵硅薄縐頒負 POJO錛圥lain Old Java Object錛夛紝鎰忎負鍙堟櫘閫氬張鍙よ€佺殑 Java 瀵硅薄鐨勬剰鎬濄€傞殢鐫€鍚勭 ORM 鏄犲皠宸ュ叿鐨勬棩瓚嬫垚鐔熷拰嫻佽錛孭OJO鏈夐噸鐜板厜褰╋紝瀹冨拰鍩轟簬 CMP 鐨勫疄浣?EJB 鐩告瘮錛屽嵆綆€鍗曞張鍏鋒湁寰堥珮鐨勫彲縐繪鎬э紝鍥犳鑱斿悎浣跨敤 ORM 鏄犲皠宸ュ叿鍜?POJO錛屽凡緇忔垚涓轟竴縐嶈秺鏉ヨ秺鍙楁榪庣殑涓旂敤鏉ュ彇浠?CMP 鐨勬寔涔呭寲鏂規銆侾OJO 鐨勭己鐐瑰氨鏄棤娉曞仛榪滅▼璋冪敤錛屼笉鏀寔鍒嗗竷寮忚綆椼€?/p>
涓轟粈涔堣鍋氭寔涔呭寲鍜孫RM璁捐
鍦ㄧ洰鍓嶇殑浼佷笟搴旂敤緋葷粺璁捐涓紝MVC錛屽嵆 Model錛堟ā鍨嬶級- View錛堣鍥撅級- Control錛堟帶鍒訛級涓轟富瑕佺殑緋葷粺鏋舵瀯妯″紡銆侻VC 涓殑 Model 鍖呭惈浜嗗鏉傜殑涓氬姟閫昏緫鍜屾暟鎹€昏緫錛屼互鍙婃暟鎹瓨鍙栨満鍒訛紙濡?JDBC鐨勮繛鎺ャ€丼QL鐢熸垚鍜孲tatement鍒涘緩銆佽繕鏈塕esultSet緇撴灉闆嗙殑璇誨彇絳夛級絳夈€傚皢榪欎簺澶嶆潅鐨勪笟鍔¢€昏緫鍜屾暟鎹€昏緫鍒嗙錛屼互灝嗙郴緇熺殑绱ц€﹀悎鍏崇郴杞寲涓烘澗鑰﹀悎鍏崇郴錛堝嵆瑙h€﹀悎錛夛紝鏄檷浣庣郴緇熻€﹀悎搴﹁揩鍒囪鍋氱殑錛屼篃鏄寔涔呭寲瑕佸仛鐨勫伐浣溿€侻VC 妯″紡瀹炵幇浜嗘灦鏋勪笂灝嗚〃鐜板眰錛堝嵆View錛夊拰鏁版嵁澶勭悊灞傦紙鍗矼odel錛夊垎紱葷殑瑙h€﹀悎錛岃€屾寔涔呭寲鐨勮璁″垯瀹炵幇浜嗘暟鎹鐞嗗眰鍐呴儴鐨勪笟鍔¢€昏緫鍜屾暟鎹€昏緫鍒嗙鐨勮В鑰﹀悎銆傝€?ORM 浣滀負鎸佷箙鍖栬璁′腑鐨勬渶閲嶈涔熸渶澶嶆潅鐨勬妧鏈紝涔熸槸鐩墠涓氱晫鐑偣鎶€鏈€?/p>
綆€鍗曟潵璇達紝鎸夐€氬父鐨勭郴緇熻璁★紝浣跨敤 JDBC 鎿嶄綔鏁版嵁搴擄紝涓氬姟澶勭悊閫昏緫鍜屾暟鎹瓨鍙栭€昏緫鏄販鏉傚湪涓€璧風殑銆?br />
涓€鑸熀鏈兘鏄涓嬪嚑涓楠わ細
1銆佸緩绔嬫暟鎹簱榪炴帴錛岃幏寰?Connection 瀵硅薄銆?br />
2銆佹牴鎹敤鎴風殑杈撳叆緇勮鏌ヨ SQL 璇彞銆?br />
3銆佹牴鎹?SQL 璇彞寤虹珛 Statement 瀵硅薄 鎴栬€?PreparedStatement 瀵硅薄銆?br />
4銆佺敤 Connection 瀵硅薄鎵ц SQL璇彞錛岃幏寰楃粨鏋滈泦 ResultSet 瀵硅薄銆?br />
5銆佺劧鍚庝竴鏉′竴鏉¤鍙栫粨鏋滈泦 ResultSet 瀵硅薄涓殑鏁版嵁銆?br />
6銆佹牴鎹鍙栧埌鐨勬暟鎹紝鎸夌壒瀹氱殑涓氬姟閫昏緫榪涜璁$畻銆?br />
7銆佹牴鎹綆楀緱鍒扮殑緇撴灉鍐嶇粍瑁呮洿鏂?SQL 璇彞銆?br />
8銆佸啀浣跨敤 Connection 瀵硅薄鎵ц鏇存柊 SQL 璇彞錛屼互鏇存柊鏁版嵁搴撲腑鐨勬暟鎹€?br />
7銆佹渶鍚庝緷嬈″叧闂悇涓?Statement 瀵硅薄鍜?Connection 瀵硅薄銆?/p>
鐢變笂鍙湅鍑轟唬鐮侀€昏緫闈炲父澶嶆潅錛岃繖榪樹笉鍖呮嫭鏌愭潯璇彞鎵ц澶辮觸鐨勫鐞嗛€昏緫銆傚叾涓殑涓氬姟澶勭悊閫昏緫鍜屾暟鎹瓨鍙栭€昏緫瀹屽叏娣鋒潅鍦ㄤ竴鍧椼€傝€屼竴涓畬鏁寸殑緋葷粺瑕佸寘鍚垚鍗冧笂涓囦釜榪欐牱閲嶅鐨勮€屽張娣鋒潅鐨勫鐞嗚繃紼嬶紝鍋囧瑕佸鍏朵腑鏌愪簺涓氬姟閫昏緫鎴栬€呬竴浜涚浉鍏寵仈鐨勪笟鍔℃祦紼嬪仛淇敼錛岃鏀瑰姩鐨勪唬鐮侀噺灝嗕笉鍙兂璞°€傚彟涓€鏂歸潰錛屽亣濡傝鎹㈡暟鎹簱浜у搧鎴栬€呰繍琛岀幆澧冧篃鍙兘鏄釜涓嶅彲鑳藉畬鎴愮殑浠誨姟銆傝€岀敤鎴風殑榪愯鐜鍜岃姹傚嵈鍗冨樊涓囧埆錛屾垜浠笉鍙兘涓烘瘡涓€涓敤鎴鋒瘡涓€縐嶈繍琛岀幆澧冭璁′竴濂椾竴鏍風殑緋葷粺銆?br /> 鎵€浠ュ氨瑕佸皢涓€鏍風殑澶勭悊浠g爜鍗充笟鍔¢€昏緫鍜屽彲鑳戒笉涓€鏍風殑澶勭悊鍗蟲暟鎹瓨鍙栭€昏緫鍒嗙寮€鏉ワ紝鍙︿竴鏂歸潰錛屽叧緋誨瀷鏁版嵁搴撲腑鐨勬暟鎹熀鏈兘鏄互涓€琛岃鐨勬暟鎹繘琛屽瓨鍙栫殑錛岃€岀▼搴忚繍琛屽嵈鏄竴涓釜瀵硅薄榪涜澶勭悊錛岃€岀洰鍓嶅ぇ閮ㄥ垎鏁版嵁搴撻┍鍔ㄦ妧鏈紙濡侫DO.NET銆丣DBC銆丱DBC絳夌瓑錛夊潎鏄互琛岄泦鐨勭粨鏋滈泦涓€鏉℃潯榪涜澶勭悊鐨勩€傛墍浠ヤ負瑙e喅榪欎竴鍥伴毦錛屽氨鍑虹幇 ORM 榪欎竴涓璞″拰鏁版嵁涔嬮棿鏄犲皠鎶€鏈€?/p>
涓句緥鏉ヨ錛屾瘮濡傝瀹屾垚涓€涓喘鐗╂墦鎶樹績閿€鐨勭▼搴忥紝鐢?ORM 鎬濇兂灝嗗涓嬪疄鐜幫紙寮曡嚜銆婃繁鍏ユ祬鍑篐ibernate銆嬶級錛?br />
涓氬姟閫昏緫濡備笅錛?br />
public Double calcAmount(String customerid, double amount)
{
// 鏍規嵁瀹㈡埛ID鑾峰緱瀹㈡埛璁板綍
Customer customer = CustomerManager.getCustomer(custmerid);
// 鏍規嵁瀹㈡埛絳夌駭鑾峰緱鎵撴姌瑙勫垯
Promotion promotion = PromotionManager.getPromotion(customer.getLevel());
// 绱Н瀹㈡埛鎬繪秷璐歸錛屽茍淇濆瓨绱緇撴灉
customer.setSumAmount(customer.getSumAmount().add(amount);
CustomerManager.save(customer);
// 榪斿洖鎵撴姌鍚庣殑閲戦
return amount.multiply(protomtion.getRatio());
}
榪欐牱浠g爜灝遍潪甯告竻鏅頒簡錛岃€屼笖涓庢暟鎹瓨鍙栭€昏緫瀹屽叏鍒嗙銆傝璁′笟鍔¢€昏緫浠g爜鐨勬椂鍊欏畬鍏ㄤ笉闇€瑕佽€冭檻鏁版嵁搴揓DBC鐨勯偅浜涘崈綃囦竴寰嬬殑鎿嶄綔錛岃€屽皢瀹冧氦緇?CustomerManager 鍜?PromotionManager 涓や釜綾誨幓瀹屾垚銆傝繖灝辨槸涓€涓畝鍗曠殑 ORM 璁捐錛屽疄闄呯殑 ORM 瀹炵幇妗嗘灦姣旇繖涓澶嶆潅鐨勫銆?/p>
鐩墠鏈夊摢浜涙祦琛岀殑 ORM 浜у搧
鐩墠浼楀鍘傚晢鍜屽紑婧愮ぞ鍖洪兘鎻愪緵浜嗘寔涔呭眰妗嗘灦鐨勫疄鐜幫紝甯歌鐨勬湁
Apache OJB 錛?a >http://db.apache.org/ojb/錛?br />
Cayenne 錛?a >http://objectstyle.org/cayenne/錛?br />
Jaxor 錛?a >http://jaxor.sourceforge.net錛?br />
Hibernate 錛?a >http://www.hibernate.org錛?br />
iBatis 錛?a >http://www.ibatis.com錛?br />
jRelationalFramework 錛?a >http://ijf.sourceforge.net錛?br />
mirage 錛?a >http://itor.cq2.org/en/oss/mirage/toon錛?br />
SMYLE 錛?a >http://www.drjava.de/smyle錛?br />
TopLink 錛?a >http://otn.oracle.com/products/ias/toplink/index.html錛?br />
鍏朵腑 TopLink 鏄?Oracle 鐨勫晢涓氫駭鍝侊紝鍏朵粬鍧囦負寮€婧愰」鐩€?/p>
鍏朵腑 Hibernate 鐨勮交閲忕駭 ORM 妯″瀷閫愭紜珛浜嗗湪 Java ORM 鏋舵瀯涓瀵煎湴浣嶏紝鐢氳嚦鍙栦唬澶嶆潅鑰屽張綣佺悙鐨?EJB 妯″瀷鑰屾垚涓轟簨瀹炰笂鐨?Java ORM 宸ヤ笟鏍囧噯銆傝€屼笖鍏朵腑鐨勮澶氳璁″潎琚?J2EE 鏍囧噯緇勭粐鍚哥撼鑰屾垚涓烘渶鏂?EJB 3.0 瑙勮寖鐨勬爣鍑嗭紝榪欎篃鏄紑婧愰」鐩獎鍝嶅伐涓氶鍩熸爣鍑嗙殑鏈夊姏瑙佽瘉銆?/p>
http://www.aygfsteel.com/fyz210/archive/2007/05/22/119098.html
瀵硅薄鍏崇郴鏄犲皠錛?/span>錛岀畝縐?/span>錛夛紝鏄殢鐫€闈㈠悜瀵硅薄鐨勮蔣浠跺紑鍙戞柟娉曞彂灞曡€屼駭鐢熺殑闈㈠悜瀵硅薄鐨勫紑鍙戞柟娉曟槸褰撲粖浼佷笟綰у簲鐢ㄥ紑鍙戠幆澧冧腑鐨勪富嫻佸紑鍙戞柟娉曪紝鍏崇郴鏁版嵁搴撴槸浼佷笟綰у簲鐢ㄧ幆澧冧腑姘鎬箙瀛樻斁鏁版嵁鐨勪富嫻佹暟鎹瓨鍌ㄧ郴緇熴€?/span>闈㈠悜瀵硅薄鏄粠杞歡宸ョ▼鍩烘湰鍘熷垯(濡傝€﹀悎銆佽仛鍚堛€佸皝瑁?鐨勫熀紜€涓婂彂灞曡搗鏉ョ殑錛岃€屽叧緋繪暟鎹簱鍒欐槸浠庢暟瀛︾悊璁哄彂灞曡€屾潵鐨勶紝涓ゅ鐞嗚瀛樺湪鏄捐憲鐨勫尯鍒€備負浜嗚В鍐寵繖涓笉鍖歸厤鐨勭幇璞?瀵硅薄鍏崇郴鏄犲皠鎶€鏈簲榪愯€岀敓銆?/span>
璁╂垜浠粠O/R寮€濮嬨€傚瓧姣峅璧鋒簮浜?瀵硅薄"(Object),鑰孯鍒欐潵鑷簬"鍏崇郴"(Relational)銆傚嚑涔庢墍鏈夌殑紼嬪簭閲岄潰錛岄兘瀛樺湪瀵硅薄鍜屽叧緋繪暟鎹簱銆傚湪涓氬姟閫昏緫灞傚拰鐢ㄦ埛鐣岄潰灞備腑錛屾垜浠槸闈㈠悜瀵硅薄鐨勩€傚綋瀵硅薄淇℃伅鍙戠敓鍙樺寲鐨勬椂鍊欙紝鎴戜滑闇€瑕佹妸瀵硅薄鐨勪俊鎭繚瀛樺湪鍏崇郴鏁版嵁搴撲腑銆?/span>
褰撲綘寮€鍙戜竴涓簲鐢ㄧ▼搴忕殑鏃跺€?涓嶄嬌鐢∣/R Mapping),浣犲彲鑳戒細鍐欎笉灝戞暟鎹闂眰鐨勪唬鐮侊紝鐢ㄦ潵浠庢暟鎹簱淇濆瓨錛屽垹闄わ紝璇誨彇瀵硅薄淇℃伅錛岀瓑絳夈€備綘鍦―AL涓啓浜嗗緢澶氱殑鏂規硶鏉ヨ鍙栧璞℃暟鎹紝鏀瑰彉鐘舵€佸璞$瓑絳変換鍔°€傝€岃繖浜涗唬鐮佸啓璧鋒潵鎬繪槸閲嶅鐨勩€?/span>
u CRUDAPIu APIu mapping metadatau ORMdirty checking, lazy association fetchingORM,,,.
: