涓€.浣曡皳鐩存柟鍥撅細
鐩存柟鍥炬槸涓€绉嶇粺璁″涓婄殑宸ュ叿锛屽苟闈濷racle涓撴湁銆傞€氬父鐢ㄤ簬瀵硅绠$悊瀵硅薄鐨勬煇涓柟闈㈢殑璐ㄩ噺鎯呭喌杩涜绠$悊锛岄€氬父鎯呭喌涓嬪畠浼氳〃鐜颁负涓€绉嶅嚑浣曞浘褰㈣〃锛岃繖涓浘褰㈣〃鏄牴鎹粠瀹為檯鐜涓墍鏀堕泦鏉ョ殑琚鐞嗗璞℃煇涓柟闈㈢殑璐ㄩ噺鍒嗗竷鎯呭喌鐨勬暟鎹墍缁樺埗鎴愮殑锛岄€氬父浼氱敾鎴愪互鏁伴噺涓哄簳杈癸紝浠ラ搴︿负楂樺害鐨勪竴绯诲垪杩炴帴璧锋潵鐨勭煩褰㈠浘锛屽洜姝ょ洿鏂瑰浘鍦ㄧ粺璁″涓婁篃绉颁负璐ㄩ噺鍒嗗竷鍥俱€傛瘮濡備笅鍥炬墍绀猴紝鏄竴涓互鍏冲鐢熷寲瀛﹁€冭瘯鎴愮哗鍒嗘暟鍒嗗竷鎯呭喌缁樺埗鐨勭洿鏂瑰浘锛?/p>
聽
浜?Oracle涓洿鏂瑰浘鐨勪綔鐢細
鏃㈢劧鐩存柟鍥炬槸涓€绉嶅琚鐞嗗璞℃煇涓€鏂归潰璐ㄩ噺杩涜绠$悊鐨勬弿杩板伐鍏凤紝閭d箞鍦∣racle涓嚜鐒跺畠涔熸槸瀵筄racle涓煇涓璞¤川閲忕殑鎻忚堪宸ュ叿锛岃繖涓璞″氨鏄疧racle涓渶閲嶈鐨勪笢瑗库€斺€斺€滄暟鎹€濄€?/p>
鍦∣racle涓洿鏂瑰浘鏄竴绉嶅鏁版嵁鍒嗗竷璐ㄩ噺鎯呭喌杩涜鎻忚堪鐨勫伐鍏枫€傚畠浼氭寜鐓ф煇涓€鍒椾笉鍚屽€煎嚭鐜版暟閲忓灏戯紝浠ュ強鍑虹幇鐨勯鐜囬珮浣庢潵缁樺埗鏁版嵁鐨勫垎甯冩儏鍐碉紝浠ヤ究鑳藉鎸囧浼樺寲鍣ㄦ牴鎹暟鎹殑鍒嗗竷鍋氬嚭姝g‘鐨勯€夋嫨銆傚湪鏌愪簺鎯呭喌涓嬶紝琛ㄧ殑鍒椾腑鐨勬暟鍊煎垎甯冨皢浼氬奖鍝嶄紭鍖栧櫒浣跨敤绱㈠紩杩樻槸鎵ц鍏ㄨ〃鎵弿鐨勫喅绛栥€傚綋 where 瀛愬彞鐨勫€煎叿鏈変笉鎴愭瘮渚嬫暟閲忕殑鏁板€兼椂锛屽皢鍑虹幇杩欑鎯呭喌锛屼娇寰楀叏琛ㄦ壂鎻忔瘮绱㈠紩璁块棶鐨勬垚鏈洿浣庛€傝繖绉嶆儏鍐典笅濡傛灉where 瀛愬彞鐨勮繃婊よ皳璇嶅垪涔嬩笂涓婃湁涓€涓悎鐞嗙殑姝g‘鐨勭洿鏂瑰浘锛屽皢浼氬浼樺寲鍣ㄥ仛鍑烘纭殑閫夋嫨鍙戞尌宸ㄥぇ鐨勪綔鐢紝浣垮緱SQL璇彞鎵ц鎴愭湰鏈€浣庝粠鑰屾彁鍗囨€ц兘銆?/p>
涓?Oracle涓娇鐢ㄧ洿鏂瑰浘鐨勫満鍚堬細
鍦ㄥ垎鏋愯〃鎴栫储寮曟椂锛岀洿鏂瑰浘鐢ㄤ簬璁板綍鏁版嵁鐨勫垎甯冦€傞€氳繃鑾峰緱璇ヤ俊鎭紝鍩轰簬鎴愭湰鐨勪紭 聽 鍖栧櫒灏卞彲浠ュ喅瀹氫娇鐢ㄥ皢杩斿洖灏戦噺琛岀殑绱㈠紩锛岃€岄伩鍏嶄娇鐢ㄥ熀浜庨檺鍒舵潯浠惰繑鍥炶澶氳鐨勭储寮曘€傜洿鏂瑰浘鐨勪娇鐢ㄤ笉鍙楃储寮曠殑闄愬埗锛屽彲浠ュ湪琛ㄧ殑浠讳綍鍒椾笂鏋勫缓鐩存柟鍥俱€?/p>
鏋勯€犵洿鏂瑰浘鏈€涓昏鐨勫師鍥犲氨鏄府鍔╀紭鍖栧櫒鍦ㄨ〃涓暟鎹弗閲嶅亸鏂滄椂鍋氬嚭鏇村ソ鐨勮鍒掞細渚嬪锛屽鏋滀竴鍒颁袱涓€兼瀯鎴愪簡琛ㄤ腑鐨勫ぇ閮ㄥ垎鏁版嵁(鏁版嵁鍋忔枩)锛岀浉鍏崇殑绱㈠紩灏卞彲鑳芥棤娉曞府鍔╁噺灏戞弧瓒虫煡璇㈡墍闇€鐨処/O鏁伴噺銆傚垱寤虹洿鏂瑰浘鍙互璁╁熀浜庢垚鏈殑浼樺寲鍣ㄧ煡閬撲綍鏃朵娇鐢ㄧ储寮曟墠鏈€鍚堥€傦紝鎴栦綍鏃跺簲璇ユ牴鎹甒HERE瀛愬彞涓殑鍊艰繑鍥炶〃涓?0锛呯殑璁板綍銆?/p>
閫氬父鎯呭喌涓嬪湪浠ヤ笅鍦哄悎涓缓璁娇鐢ㄧ洿鏂瑰浘锛?/p>
聽锛?锛夈€佸綋Where瀛愬彞寮曠敤浜嗗垪鍊煎垎甯冨瓨鍦ㄦ槑鏄惧亸宸殑鍒楁椂锛氬綋杩欑鍋忓樊鐩稿綋鏄庢樉鏃讹紝浠ヨ嚦浜?WHERE 瀛愬彞涓殑鍊煎皢浼氫娇浼樺寲鍣ㄩ€夋嫨涓嶅悓鐨勬墽琛岃鍒掋€傝繖鏃跺簲璇ヤ娇鐢ㄧ洿鏂瑰浘鏉ュ府鍔╀紭鍖栧櫒鏉ヤ慨姝f墽琛岃矾寰勩€傦紙娉ㄦ剰锛氬鏋滄煡璇笉寮曠敤璇ュ垪锛屽垯鍒涘缓鐩存柟鍥炬病鏈夋剰涔夈€傝繖绉嶉敊璇緢甯歌锛岃澶?DBA 浼氬湪鍋忓樊鍒椾笂鍒涘缓鏌辩姸鍥撅紝鍗充娇娌℃湁浠讳綍鏌ヨ寮曠敤璇ュ垪銆傦級
锛?锛夈€佸綋鍒楀€煎鑷翠笉姝g‘鐨勫垽鏂椂锛氳繖绉嶆儏鍐甸€氬父浼氬彂鐢熷湪澶氳〃杩炴帴鏃讹紝渚嬪锛屽亣璁炬垜浠湁涓€涓簲椤圭殑琛ㄨ仈鎺ワ紝鍏剁粨鏋滈泦鍙湁 10 琛屻€侽racle 灏嗕細浠ヤ竴绉嶄娇绗竴涓仈鎺ョ殑缁撴灉闆嗭紙闆嗗悎鍩烘暟锛夊敖鍙兘灏忕殑鏂瑰紡灏嗚〃鑱旀帴璧锋潵銆傞€氳繃鍦ㄤ腑闂寸粨鏋滈泦涓惡甯︽洿灏戠殑璐熻浇锛屾煡璇㈠皢浼氳繍琛屽緱鏇村揩銆備负浜嗕娇涓棿缁撴灉鏈€灏忓寲锛屼紭鍖栧櫒灏濊瘯鍦?SQL 鎵ц鐨勫垎鏋愰樁娈佃瘎浼版瘡涓粨鏋滈泦鐨勯泦鍚堝熀鏁般€傚湪鍋忓樊鐨勫垪涓婃嫢鏈夌洿鏂瑰浘灏嗕細鏋佸ぇ鍦板府鍔╀紭鍖栧櫒浣滃嚭姝g‘鐨勫喅绛栥€傚浼樺寲鍣ㄥ涓棿缁撴灉闆嗙殑澶у皬浣滃嚭涓嶆纭殑鍒ゆ柇锛屽畠鍙兘浼氶€夋嫨涓€绉嶆湭杈惧埌鏈€浼樺寲鐨勮〃鑱旀帴鏂规硶銆傚洜姝ゅ悜璇ュ垪娣诲姞鐩存柟鍥剧粡甯镐細鍚戜紭鍖栧櫒鎻愪緵浣跨敤鏈€浣宠仈鎺ユ柟娉曟墍闇€鐨勪俊鎭€?/p>
鍥?鐩存柟鍥炬湁涓ょ绫诲埆锛岀瓑棰戠洿鏂瑰浘涓庣瓑楂樼洿鏂瑰浘銆?/p>
榛樿鐨勶紝濡傛灉涓€涓€炬枩鍒椾笂鐨勫敮涓€鍊艰秴杩囦簡254涓紝閭d箞ORACLE浼氬姝ゅ垪寤虹珛绛夐珮鐩存柟鍥撅紝鍚﹀垯寤虹珛绛夐鐩存柟鍥俱€?/p>
閫氳繃濡備笅鏂瑰紡锛屽缓绔嬭〃TAB锛屾洿鏂板瓧娈礏锛岃鍒桞浜х敓鍊炬枩銆傚苟鍦˙鍒椾笂鍒涘缓绱㈠紩銆?/p>
SQL> spool d:\hist.txt
SQL> create table tab (a number, b number);
聽
琛ㄥ凡鍒涘缓銆?/p>
聽
SQL>
SQL> begin
聽 2 聽 聽 聽 聽 for i in 1..10000 loop
聽 3 聽 聽 聽 聽 聽 insert into tab values (i, i);
聽 4 聽 聽 聽 聽 end loop;
聽 5 聽 聽 聽 聽 commit;
聽 6 聽 聽 聽 end;
聽 7 聽 聽 聽 /
聽
PL/SQL 杩囩▼宸叉垚鍔熷畬鎴愩€?/p>
聽
SQL> update tab set b=5 where b between 6 and 9995;
聽
宸叉洿鏂?990琛屻€?/p>
SQL> commit;
聽
鎻愪氦瀹屾垚銆?/p>
聽
SQL> create index ix_tab_b on tab(b);
聽
绱㈠紩宸插垱寤恒€?/p>
聽
聽
鐒跺悗鍒嗘瀽琛紝寮哄埗浣垮垪B涓嶄骇鐢熺洿鏂瑰浘銆?/p>
BEGIN
聽 DBMS_STATS.GATHER_TABLE_STATS(OWNNAME 聽 聽=> 'SCOTT',
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 TABNAME 聽 聽=> 'TAB',
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CASCADE 聽 聽=> TRUE,
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 METHOD_OPT => 'FOR 聽COLUMNS B SIZE 1 ');
END;
鏌ョ湅瑙嗗浘USER_TAB_HISTOGRAMS锛屽垪B涓婂彧鏈夋渶澶у€硷紝鏈€灏忓€间袱鏉¤褰曞垎鍒搴旂鐐瑰彿锛坋ndpoint_number锛?鍜?锛岃繖绉嶆樉绀鸿鏄庡垪B娌℃湁鐩存柟鍥句俊鎭€?/p>
SQL>SELECT table_name,column_name,endpoint_number,endpoint_value FROM USER_TAB_HISTOGRAMS WHERE TABLE_NAME='TAB' 锛?/p>
聽
TABLE_NAME 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 COLUMN_NAME 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽ENDPOINT_NUMBER ENDPOINT_VALUE
------------------------------ ---------------------------------------- --------------- --------------
TAB 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽B 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽0 聽 聽 聽 聽 聽 聽 聽1
TAB 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽B 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽1 聽 聽 聽 聽 聽10000
聽
鍦ㄦ病鏈夌洿鏂瑰浘鐨勬儏鍐典笅锛屽湪B鍒椾笂杩涜绛夊€兼煡璇㈢殑鏃跺€欙紝閮芥槸绱