Oracle鈥斺€?三绱㈠紩

Oracle鈥斺€?3绱㈠紩
Oracle鈥斺€?3绱㈠紩


Oracle 绱㈠紩 璇﹁В

鍒涘缓Oracle绱㈠紩鐨勬爣鍑嗚娉?
CREATE INDEX 绱㈠紩鍚?ON 琛ㄥ悕 (鍒楀悕)
聽聽聽聽 TABLESPACE 琛ㄧ┖闂村悕;
鍒涘缓鍞竴绱㈠紩:
CREATE unique INDEX 绱㈠紩鍚?ON 琛ㄥ悕 (鍒楀悕)
聽聽聽聽 TABLESPACE 琛ㄧ┖闂村悕;
鍒涘缓缁勫悎绱㈠紩:
CREATE INDEX 绱㈠紩鍚?ON 琛ㄥ悕 (鍒楀悕1,鍒楀悕2)
聽聽聽聽 TABLESPACE 琛ㄧ┖闂村悕;
鍒涘缓鍙嶅悜閿储寮?
CREATE INDEX 绱㈠紩鍚?ON 琛ㄥ悕 (鍒楀悕) reverse
聽聽聽聽 TABLESPACE 琛ㄧ┖闂村悕;

1銆佹槑纭湴鍒涘缓绱㈠紩
銆€銆€create index index_name on table_name(field_name)
銆€銆€tablespace tablespace_name
銆€銆€pctfree 5
銆€銆€initrans 2
銆€銆€maxtrans 255
銆€銆€storage
銆€銆€(
銆€銆€minextents 1
銆€銆€maxextents 16382
銆€銆€pctincrease 0
銆€銆€);
銆€銆€2銆佸垱寤哄熀浜庡嚱鏁扮殑绱㈠紩
銆€銆€甯哥敤涓嶶PPER銆丩OWER銆乀O_CHAR(date)绛夊嚱鏁板垎绫讳笂锛屼緥锛?
銆€銆€create index idx_func on emp(UPPER(ename)) tablespace tablespace_name;
銆€銆€3銆佸垱寤轰綅鍥剧储寮?
銆€銆€瀵瑰熀鏁拌緝灏忥紝涓斿熀鏁扮浉瀵圭ǔ瀹氱殑鍒楀缓绔嬬储寮曟椂锛岄鍏堝簲璇ヨ€冭檻浣嶅浘绱㈠紩锛屼緥锛?
銆€銆€create bitmap index idx_bitm on class (classno) tablespace tablespace_name;
銆€銆€4銆佹槑纭湴鍒涘缓鍞竴绱㈠紩
銆€銆€鍙互鐢╟reate unique index璇彞鏉ュ垱寤哄敮涓€绱㈠紩锛屼緥锛?
銆€銆€create unique index dept_unique_idx on dept(dept_no) tablespace idx_1;
銆€銆€5銆佸垱寤轰笌绾︽潫鐩稿叧鐨勭储寮?
銆€銆€鍙互鐢╱sing index瀛楀彞锛屼负涓巙nique鍜宲rimary key绾︽潫鐩稿叧鐨勭储寮曪紝渚嬶細
銆€銆€alter table table_name
銆€銆€add constraint PK_primary_keyname primary key(field_name)
銆€銆€using index tablespace tablespace_name;
銆€銆€濡備綍鍒涘缓灞€閮ㄥ尯绱㈠紩锛?
銆€銆€1)鍩虹琛ㄥ繀椤绘槸鍒嗗尯琛?
銆€銆€2)鍒嗗尯鏁伴噺涓庡熀纭€琛ㄧ浉鍚?
銆€銆€3)姣忎釜绱㈠紩鍒嗗尯鐨勫瓙鍒嗗尯鏁伴噺涓庣浉搴旂殑鍩虹琛ㄥ垎鍖虹浉鍚?
銆€銆€4)鍩虹琛ㄧ殑鑷垎鍖轰腑鐨勮鐨勭储寮曢」锛岃瀛樺偍鍦ㄨ绱㈠紩鐨勭浉搴旂殑鑷垎鍖轰腑锛屼緥濡?
銆€銆€create index TG_CDR04_SERV_ID_IDX on TG_CDR04(SERV_ID)
銆€銆€Pctfree 5
銆€銆€Tablespace TBS_AK01_IDX
銆€銆€Storage(
銆€銆€MaxExtents 32768
銆€銆€PctIncrease 0
銆€銆€FreeLists 1
銆€銆€FreeList Groups 1
銆€銆€)
銆€銆€local
銆€銆€/
銆€銆€濡備綍鍒涘缓鑼冨洿鍒嗗尯鐨勫叏灞€绱㈠紩锛?
銆€銆€鍩虹琛ㄥ彲浠ユ槸鍏ㄥ眬琛ㄥ拰鍒嗗尯琛?
銆€銆€create index idx_start_date on tg_cdr01(start_date)
銆€銆€global partition by range(start_date)
銆€銆€(partition p01_idx vlaues less than ('0106')
銆€銆€partition p01_idx vlaues less than ('0111')
銆€銆€...
銆€銆€partition p01_idx vlaues less than ('0401'))
銆€銆€/
銆€銆€濡備綍閲嶅缓鐜板瓨鐨勭储寮曪紵
銆€銆€閲嶅缓鐜板瓨鐨勭储寮曠殑褰撳墠鏃跺埢涓嶄細褰卞搷鏌ヨ
銆€銆€閲嶅缓绱㈠紩鍙互鍒犻櫎棰濆鐨勬暟鎹潡
銆€銆€鎻愰珮绱㈠紩鏌ヨ鏁堢巼
銆€銆€alter index idx_name rebuild nologging;
銆€銆€瀵逛簬鍒嗗尯绱㈠紩
銆€銆€alter index idx_name rebuild partition partition_name nologging;
銆€銆€鍒犻櫎绱㈠紩鐨勫師鍥狅紵
銆€銆€1)涓嶅啀闇€瑕佺殑绱㈠紩
銆€銆€2)绱㈠紩娌℃湁閽堝鍏剁浉鍏崇殑琛ㄦ墍鍙戝竷鐨勬煡璇㈡彁渚涙墍鏈熸湜鐨勬€ц兘鏀瑰杽
銆€銆€3)搴旂敤娌℃湁鐢ㄨ绱㈠紩鏉ユ煡璇㈡暟鎹?
銆€銆€4)璇ョ储寮曟棤鏁堬紝蹇呴』鍦ㄩ噸寤轰箣鍓嶅垹闄よ绱㈠紩
銆€銆€5)璇ョ储寮曞凡缁忓彉鐨勫お纰庝簡锛屽繀椤诲湪閲嶅缓涔嬪墠鍒犻櫎璇ョ储寮?
銆€銆€璇彞锛?
銆€銆€drop index idx_name;
銆€銆€drop index idx_name partition partition_name;
銆€銆€寤虹珛绱㈠紩鐨勪唬浠凤紵
銆€銆€鍩虹琛ㄧ淮鎶ゆ椂锛岀郴缁熻鍚屾椂缁存姢绱㈠紩锛屼笉鍚堢悊鐨勭储寮曞皢涓ラ噸褰卞搷绯荤粺璧勬簮锛?
銆€銆€涓昏琛ㄧ幇鍦–PU鍜孖/O涓娿€?
銆€銆€鎻掑叆銆佹洿鏂般€佸垹闄ゆ暟鎹骇鐢熷ぇ閲廳b file sequential read閿佺瓑寰呫€?

1.閲嶅缓绱㈠紩
alter index index_name1 rebuild;

2.閲嶅缓绱㈠紩骞惰浆绉诲埌鍒殑琛ㄧ┖闂?
alter index index_name1 rebuild tablespace聽other_tablespace;聽聽--杩欎釜琛ㄧ┖闂磋棣栧厛鍒涘缓

3.淇敼绱㈠紩鐨勪竴浜涘弬鏁拌缃?
alter index index_name rebuild pctfree 30 storage(next 100k);

4.鑷姩涓虹储寮曞垎閰嶇┖闂?
alter index index_name allocate extent;

5.鏁村悎绱㈠紩纰庣墖
alter index index_name coalesce;

6.鍒犻櫎涓€涓储寮?
drop index index_name;

7.寮€鍚绱㈠紩鐨勭洃鎺?鐒跺悗鍒嗘瀽绱㈠紩
--棣栧厛寮€鍚绱㈠紩鐨勭洃鎺?
alter index index_name 聽monitoring usage;
--鐒跺悗鎵ц涓€涓笌绱㈠紩鏈夊叧鐨勬煡璇?
--鎺ョ潃鍏抽棴瀵圭储寮曠殑鐩戞帶
alter index index_name 聽nomonitoring usage;
--鐒跺悗鏌ヨv$object_usage瑙嗗浘
select index_name,start_monitoring,end_monitoring
from 聽v$object_usage
where index_name = '........'

涓€銆侀噸寤虹储寮曠殑鍓嶆彁
1銆佽〃涓婇绻佸彂鐢焨pdate,delete鎿嶄綔锛?
2銆佽〃涓婂彂鐢熶簡alter table ..move鎿嶄綔锛坢ove鎿嶄綔瀵艰嚧浜唕owid鍙樺寲锛夈€?

浜屻€侀噸寤虹储寮曠殑鏍囧噯
1銆佺储寮曢噸寤烘槸鍚︽湁蹇呰锛屼竴鑸湅绱㈠紩鏄惁鍊炬枩鐨勪弗閲嶏紝鏄惁娴垂浜嗙┖闂达紝 閭e簲璇ュ浣曟墠鍙互鍒ゆ柇绱㈠紩鏄惁鍊炬枩鐨勪弗閲嶏紝鏄惁娴垂浜嗙┖闂达紝 瀵圭储寮曡繘琛岀粨鏋勫垎鏋愶紙濡備笅锛夛細
SQL>Analyze index index_name validate structure;

2銆佸湪鎵ц姝ラ1鐨剆ession涓煡璇ndex_stats琛紝涓嶈鍒板埆鐨剆ession鍘绘煡璇€?
SQL>select height,DEL_LF_ROWS/LF_ROWS from index_stats;
璇存槑锛氬綋 鏌ヨ鍑烘潵鐨?height>=4 鎴栬€?DEL_LF_ROWS/LF_ROWS>0.2 鐨勫満鍚?锛?璇ョ储寮曡€冭檻閲嶅缓 銆?

涓句緥锛?(t_gl_assistbalance 26 涓囧鏉′俊鎭?)
SQL> select count(*) from t_gl_assistbalance ;
杈撳嚭缁撴灉锛?
COUNT(*)
----------
265788

SQL> Analyze index IX_GL_ASSTBAL_1 validate structure;
Index analyzed

SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;
杈撳嚭缁撴灉锛?
HEIGHT DEL_LF_ROWS/LF_ROWS
---------- -------------------
4 1

涓夈€侀噸寤虹储寮曠殑鏂瑰紡
1銆乨rop 鍘熸潵鐨勭储寮曪紝鐒跺悗鍐嶅垱寤虹储寮?
涓句緥锛?
鍒犻櫎绱㈠紩锛歞rop index IX_PM_USERGROUP;
鍒涘缓绱㈠紩锛歝reate index IX_PM_USERGROUP on T_PM_USER (fgroupid);
璇存槑锛氭鏂瑰紡鑰楁椂闂达紝鏃犳硶鍦?4*7鐜涓疄鐜帮紝涓嶅缓璁娇鐢ㄣ€?

2 銆佺洿鎺ラ噸寤猴細
涓句緥锛?
alter index indexname rebuild; 鎴朼lter index indexname rebuild online;
璇存槑锛氭鏂瑰紡姣旇緝蹇紝鍙互鍦?4*7鐜涓疄鐜帮紝寤鸿浣跨敤姝ゆ柟寮忋€?

鍥涖€乤lter index rebuild 鍐呴儴杩囩▼鍜屾敞鎰忕偣
alter index rebuild 鍜宎lter index rebuil online鐨勫尯鍒?
1銆佹壂鎻忔柟寮忎笉鍚?
1.1銆丷ebuild浠ndex fast full scan锛坥r table full scan锛?鏂瑰紡璇诲彇鍘熺储寮曚腑鐨勬暟鎹潵鏋勫缓涓€涓柊鐨勭储寮曪紝鏈夋帓搴忕殑鎿嶄綔;

1.2銆乺ebuild online 鎵ц琛ㄦ壂鎻忚幏鍙栨暟鎹紝鏈夋帓搴忕殑鎿嶄綔;
璇存槑锛歊ebuild 鏂瑰紡 (index fast full scan or table full scan 鍙栧喅浜庣粺璁′俊鎭殑cost)
涓句緥1
SQL> explain plan for alter index IX_GL_ASSTBAL_1 rebuild;

Explained
SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT

---------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost |

---------------------------------------------------------------------

| 0 | ALTER INDEX STATEMENT | | 999K| 4882K| 3219 |

| 1 | INDEX BUILD NON UNIQUE| IDX_POLICY_ID2 | | | |

| 2 | SORT CREATE INDEX | | 999K| 4882K| |

| 3 | INDEX FAST FULL SCAN | IDX_POLICY_ID2 | 999K| 4882K| |

---------------------------------------------------------------------

涓句緥2
SQL> explain plan for alter index idx_policy_id rebuild;

Explained

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT

---------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost |

---------------------------------------------------------------------

| 0 | ALTER INDEX STATEMENT | | 2072K| 9M| 461 |

| 1 | INDEX BUILD NON UNIQUE| IDX_POLICY_ID | | | |

| 2 | SORT CREATE INDEX | | 2072K| 9M| |

| 3 | TABLE ACCESS FULL | TEST_INDEX | 2072K| 9M| 461 |

涓句緥3 ( 娉ㄦ剰鍜?涓句緥1 姣旇緝 )
Rebuil online 鏂瑰紡 锛?
SQL> explain plan for alter index idx_policy_id2 rebuild online;

Explained
SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT

---------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost |

---------------------------------------------------------------------| 0 | ALTER INDEX STATEMENT | | 999K| 4882K| 3219 |

| 1 | INDEX BUILD NON UNIQUE| IDX_POLICY_ID2 | | | |

| 2 | SORT CREATE INDEX | | 999K| 4882K| |

| 3 | TABLE ACCESS FULL | TEST_INDEX2 | 999K| 4882K| 3219 |

2 銆乺ebuild 浼氶樆濉?dml 鎿嶄綔 锛宺ebuild online 涓嶄細闃诲 dml 鎿嶄綔 锛?

3 銆乺ebuild online 鏃剁郴缁熶細浜х敓涓€涓?SYS_JOURNAL_xxx 鐨?IOT 绫诲瀷鐨勭郴缁熶复鏃舵棩蹇楄〃 锛?鎵€鏈?rebuild online 鏃剁储寮曠殑鍙樺寲閮借褰曞湪杩欎釜琛ㄤ腑 锛?褰撴柊鐨勭储寮曞垱寤哄畬鎴愬悗 锛?鎶婅繖涓〃鐨勮褰曠淮鎶ゅ埌鏂扮殑绱㈠紩涓幓 锛?鐒跺悗 drop 鎺夋棫鐨勭储寮?锛宺ebuild online 灏卞畬鎴愪簡銆?

娉ㄦ剰鐐癸細
1銆?鎵цrebuild鎿嶄綔鏃讹紝闇€瑕佹鏌ヨ〃绌洪棿鏄惁瓒冲锛?
2銆佽櫧鐒惰rebuild online鎿嶄綔鍏佽dml鎿嶄綔锛屼絾鏄繕鏄缓璁湪涓氬姟涓嶇箒蹇欐椂闂存杩涜锛?

Rebuild鎿嶄綔浼氫骇鐢熷ぇ閲弐edo log 锛?
浜斻€侀噸寤哄垎鍖鸿〃涓婄殑鍒嗗尯绱㈠紩
閲嶅缓鍒嗗尯绱㈠紩鏂规硶锛?
Alter index indexname rebuild partition paritionname tablespace tablespacename;

Alter index indexname rebuild subpartition partitioname tablespace tablespacename;

Partition name 鍙互浠巙ser_ind_partitions鏌ユ壘
Tablepace 鍙傛暟鍏佽alter index鎿嶄綔鏇存敼绱㈠紩鐨勫瓨鍌ㄧ┖闂达紱

鍏€佺储寮曠姸鎬佹弿杩?
鍦ㄦ暟鎹瓧鍏镐腑鏌ョ湅绱㈠紩鐘舵€侊紝鍙戠幇鏈変笁绉嶏細
valid:褰撳墠绱㈠紩鏈夋晥
N/A :鍒嗗尯绱㈠紩 鏈夋晥
unusable:绱㈠紩澶辨晥
涓冦€佹湳璇?
1銆侀珮鍩烘暟锛氱畝鍗曠悊瑙e氨鏄〃涓垪鐨勪笉鍚屽€煎銆?
2銆佷綆鍩烘暟锛氬缓鍗曠悊瑙e氨鏄〃涓殑鍒楃殑涓嶅悓鍊煎皯銆?
3銆佷互鍒犻櫎鐨勫彾鑺傜偣鏁伴噺锛氭寚寰楁槸鏁版嵁琛岀殑delete鎿嶄綔浠庨€昏緫涓婂垹闄ょ殑绱㈠紩鑺傜偣 鐨勬暟閲忥紝瑕佽浣弌racle鍦ㄥ垹闄ゆ暟鎹鍚庯紝灏?鈥?姝?鈥?鑺傜偣淇濈暀鍦ㄧ储寮曚腑锛岃繖鏍峰仛鍙互鍔犲揩sql鍒犻櫎鎿嶄綔鐨勯€熷害锛屽洜姝racle鍒犻櫎鏁版嵁琛屽悗鍙互涓嶅繀閲嶆柊骞宠 绱㈠紩銆?

4銆佺储寮曢珮搴︼細绱㈠紩楂樺害鏄寚鐢变簬鏁版嵁琛岀殑鎻掑叆鎿嶄綔鑰屼骇鐢熺殑绱㈠紩灞傛暟锛屽綋琛ㄤ腑娣诲姞澶ч噺鏁版嵁鏃讹紝oracle灏嗙敓鎴愮储寮曠殑鏂板眰娆′互閫傚簲鍔犲叆鐨勬暟鎹锛屽洜姝わ紝oracle绱㈠紩鍙兘鏈?灞傦紝浣嗘槸杩欏彧浼氬嚭鐜板湪绱㈠紩鏁颁腑浜х敓澶ч噺鎻掑叆鎿嶄綔鐨勫尯鍩熴€侽racle绱㈠紩鐨勪笁灞傜粨鏋勫彲浠ユ敮鎸佹暟鐧句竾鐨勯」鐩紝鑰屽叿澶?灞傛垨鏄洿澶氬眰鐨勯渶瑕侀噸寤恒€?
5銆佹瘡娆$储寮曡闂殑璇诲彇鏁帮細鏄寚鍒╃敤绱㈠紩璇诲彇涓€鏁版嵁琛屾椂鎵€闇€瑕佺殑閫昏緫I/O鎿嶄綔鏁帮紝閫昏緫璇诲彇涓嶅繀鏄墿鐞嗚鍙栵紝鍥犱负绱㈠紩鐨勮澶氬唴瀹瑰凡缁忎繚瀛樺湪鏁版嵁缂撳啿鍖猴紝鐒惰€岋紝浠讳綍鏁版嵁澶т簬10鐨勭储寮曢兘闇€瑕侀噸寤恒€?

6銆佷粈涔堟椂鍊欓噸寤哄憿锛?
瀵熺湅 dba_indexes 涓殑 blevel 銆傝繖鍒楁槸璇存槑绱㈠紩浠庢牴鍧楀埌鍙跺揩鐨勭骇鍒紝鎴栨槸娣卞害銆傚鏋滅骇鍒ぇ浜庣瓑浜?銆傚垯闇€瑕侀噸寤猴紝

濡備笅 锛歋elect index_name,blevel from dba_indexes where blevel>=4.
鍙︿竴涓粠閲嶅缓涓彈鐩婄殑鎸囨爣鏄剧劧鏄綋璇ョ储寮曚腑鐨勮鍒犻櫎椤瑰崰鎬荤殑椤规暟鐨勭櫨鍒嗘瘮銆傚鏋滃湪20%浠ヤ笂鏃讹紝涔熷簲褰撻噸寤猴紝濡備笅

SQL>analyze index index_name validate structure

SQL>select (del_lf_rows_len/lf_rows_len)*100 from index_stats where name= 鈥?index_name 鈥?

灏辫兘鐪嬪埌鏄惁杩欎釜绱㈠紩琚垹闄ょ殑鐧惧垎姣斻€?
7銆佷粈涔堟牱鐨勯噸寤烘柟寮忔洿濂斤紵
锛?锛夈€佸缓绱㈠紩鐨勫姙娉曪細
1.1銆佸垹闄ゅ苟浠庡ご寮€濮嬪缓绔嬬储寮曘€?
1.2 銆?浣跨敤 alter index index_name rebuild 鍛戒护閲嶅缓绱㈠紩銆?
1.3 銆?浣跨敤 alter index index_name coalesce 鍛戒护閲嶅缓绱㈠紩銆?
锛?锛夈€佷笅闈㈣璁轰竴涓嬭繖涓夌鏂规硶鐨勪紭缂虹偣锛?

2.1銆佸垹闄ゅ苟浠庡ご寮€濮嬪缓绱㈠紩锛氭柟娉曟槸鏈€鎱㈢殑锛屾渶鑰楁椂鐨勩€備竴鑸笉寤鸿銆?

2.2銆丄lter index index_name rebuild
蹇€熼噸寤虹储寮曠殑涓€绉嶆湁鏁堢殑鍔炴硶锛屽洜涓轰娇鐢ㄧ幇鏈夌储寮曢」鏉ラ噸寤烘柊绱㈠紩锛屽鏋滃鎴锋搷浣滄椂鏈夊叾浠栫敤鎴峰湪瀵硅繖涓〃鎿嶄綔锛屽敖閲忎娇鐢ㄥ甫online鍙傛暟鏉ユ渶澶ч檺搴︾殑鍑忓皯绱㈠紩閲嶅缓鏃跺皢浼氬嚭鐜扮殑浠讳綍鍔犻攣闂锛宎lter index index_name rebuild online銆?

浣嗘槸,鐢变簬鏂版棫绱㈠紩鍦ㄥ缓绔嬫椂鍚屾椂瀛樺湪锛屽洜姝わ紝浣跨敤杩欑鎶€宸у垯闇€瑕佹湁棰濆鐨勭鐩樼┖闂村彲涓存椂浣跨敤锛屽綋绱㈠紩寤哄畬鍚庢妸鑰佺储寮曞垹闄わ紝濡傛灉娌℃湁鎴愬姛锛屼篃涓嶄細褰卞搷鍘熸潵鐨勭储寮曘€傚埄鐢ㄨ繖绉嶅姙娉曞彲浠ョ敤鏉ュ皢涓€涓储寮曠Щ鍒版柊鐨勮〃绌洪棿銆?

Alter index index_name rebuild tablespace tablespace_name 銆?
杩欎釜鍛戒护鐨勬墽琛屾楠ゅ涓嬶細
棣栧厛锛岄€愪竴璇诲彇鐜版湁绱㈠紩锛屼互鑾峰彇绱㈠紩鐨勫叧閿瓧銆?
鍏舵锛屾寜鏂扮殑缁撴瀯濉啓涓存椂鏁版嵁娈点€?
鏈€鍚庯紝涓€鏃︽搷浣滄垚鍔燂紝鍒犻櫎鍘熸湁绱㈠紩鏍戯紝闄嶄复鏃舵暟鎹閲嶅懡鍚嶄负鏂扮殑绱㈠紩銆?

闇€瑕佹敞鎰忕殑鏄痑lter index index_name rebuild 鍛戒护涓繀椤讳娇鐢╰ablespace瀛楀彞锛屼互淇濊瘉閲嶅缓宸ヤ綔鏄湪鐜版湁绱㈠紩鐩稿悓鐨勮〃绌洪棿杩涜銆?

2.3銆乤lter index index_name coalesce
浣跨敤甯︽湁coalesce鍙傛暟鏃堕噸寤烘湡闂翠笉闇€瑕侀澶栫┖闂达紝瀹冨彧鏄湪閲嶅缓绱㈠紩鏃跺皢澶勪簬鍚屼竴涓储寮曞垎鏀唴鐨勫彾鍧楁嫾鍚堣捣鏉ワ紝杩欐渶澶ч檺搴︾殑鍑忓皯浜嗕笌鏌ヨ杩囩▼涓浉鍏崇殑娼滃湪鐨勫姞閿侀棶棰橈紝浣嗘槸锛宑oalesce閫夐」涓嶈兘鐢ㄦ潵灏嗕竴涓储寮曡浆绉诲埌鍏朵粬琛ㄧ┖闂淬€?

鍏€佸叾浠?
1銆乼runcate 鍒嗗尯鎿嶄綔鍜宼runcate 鏅€氳〃鐨勫尯鍒紵
1.1銆乀runcate 鍒嗗尯鎿嶄綔浼氬鑷村叏灞€绱㈠紩澶辨晥; truncate 鏅€氳〃瀵圭储寮曟病鏈夊奖鍝嶏紱

1.2銆乀runcate 鍒嗗尯鎿嶄綔涓嶄細閲婃斁鍏ㄥ眬绱㈠紩涓殑绌洪棿锛岃€宼runcate 鏅€氳〃浼氶噴鏀剧储寮曟墍鍗犵┖闂达紱

2銆乺ename 琛ㄥ悕鎿嶄綔瀵圭储寮曟病鏈夊奖鍝嶏紝鍥犱负rename鎿嶄綔鍙槸鏇存敼浜嗘暟鎹瓧鍏革紝琛ㄤ腑鏁版嵁琛岀殑rowid骞舵病鏈夊彂鐢熷彉鍖?

鎬荤粨锛?
1銆佸垽鏂槸鍚﹂渶瑕侀噸寤虹储寮曪細
SQL>analyze index index_name validate structure;

SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;

锛?鎴?Select index_name,blevel from dba_indexes where blevel>=4 锛?

璇存槑 锛?褰撴煡璇㈠嚭鏉ョ殑 height>=4 鎴栬€?DEL_LF_ROWS/LF_ROWS>0.2 鐨勫満鍚?锛?璇ョ储寮曡€冭檻閲嶅缓 锛?

2 銆侀噸寤虹储寮曟柟娉?锛?
鏂规硶涓€銆?
Alter index index_name rebuild tablespace tablespace_name;
浼樼偣锛氭槸蹇€熼噸寤虹储寮曠殑涓€绉嶆湁鏁堢殑鍔炴硶锛屽彲浠ョ敤鏉ュ皢涓€涓储寮曠Щ鍒版柊鐨勮〃绌洪棿銆?
缂虹偣锛氶噸寤烘湡闂撮渶瑕侀澶栫┖闂淬€?

鏂规硶浜屻€?
alter index index_name coalesce;
浼樼偣锛氶噸寤烘湡闂翠笉闇€瑕侀澶栫┖闂淬€?
缂虹偣锛歝oalesce閫夐」涓嶈兘鐢ㄦ潵灏嗕竴涓储寮曡浆绉诲埌鍏朵粬琛ㄧ┖闂淬€?


绱㈠紩鐨勪笁澶х壒鐐癸細
1.绱㈠紩鏁扮殑楂樺害涓€鑸緝浣?
2.绱㈠紩鐢辩储寮曞垪瀛樺偍鐨勫€煎強rowid缁勬垚
聽绱㈠紩SELECT * FROM T WHERE ID = 1浼氬鑷寸储寮曞洖琛ㄧ殑浜х敓锛岃嫢涓嶉渶瑕佺湅鍏ㄩ儴鏁版嵁鍙敤SELECT ID FROM T WHERE ID= 1鎴栧彲寤哄鍒楃殑澶嶆牳绱㈠紩锛屼絾鏄鏍哥储寮曟渶濂戒笉瑕佽秴杩?鍒楃殑澶嶆牳銆傚湪鏇存柊鎿嶄綔涓嶉绻佺殑鎯呭喌涓嬪彲鑰冭檻浣跨敤绱㈠紩缁勭粐琛?
3.绱㈠紩鏈韩鏄湁搴忕殑
聽鍑忓皯ORDER BY銆丏ISTINCT鎺掑簭鎵€娴垂鐨凜OST

鑱氬悎鍥犲瓙锛?
寤虹珛绱㈠紩鐨勫垪鐨勯『搴忎笌绱㈠紩鑷姩鎺掑簭鐨勫垪鐨勯『搴忕殑涓嶅搴斿害琚О涓鸿仛鍚堝洜瀛愶紝鑱氬悎鍥犲瓙瓒婂ぇ绱㈠紩鍥炶〃璇昏秺娴垂鏃堕棿(绱㈠紩鍥炶〃璇讳笉鍙伩鍏嶇殑鎯呭喌涓?

Oracle鎵ц璁″垝鍒嗙被锛?
1銆乀ABLE ACCESS FULL聽 鍏ㄨ〃鎵弿
2銆両NDEX FAST FULL SCAN聽 绱㈠紩蹇€熸壂鎻徛?(涓嶈€冭檻鎺掑簭COUNT(ID), SUM(ID), AVG(ID)锛屽垪蹇呴』闈炵┖鎴朓S NOT NULL)
3銆両NDEX FULL SCAN聽 绱㈠紩鍏ㄦ壂聽 (SELECT ID FROM T WHERE ID = 120)
4銆両NDEX FULL SCAN(MIN/MAX)聽 鏈€澶у€兼渶灏忓€肩储寮曞叏鎵?(SELECT MAX(ID) FROM T)
5銆乀ABLE ACCESS BY INDEX ROWID聽 绱㈠紩鍥炶〃璇宦?(SELECT * FROM T WHERE ID = 1)
6銆両NDEX RANGE SCAN聽 绱㈠紩鑼冨洿鎵弿聽 (SELECT * FROM T WHERE ID < 100)
7銆丅ITMAP INDEX FAST FULL SCAN聽 浣嶅浘绱㈠紩蹇€熸壂鎻徛?(涓嶈€冭檻鎺掑簭COUNT(ID), SUM(ID), AVG(ID)锛屼綅鍥惧揩閫熺储寮曟壂鎻忛€熷害闈炲父蹇皢杩戞槸鏅€氱储寮曠殑鐧惧€?鍒椾笉蹇呴潪绌?

btree绱㈠紩浼樺寲绠€浠?
T琛?瀛楁锛歄BJECT_ID, OBJECT_NAME
鍗曞垪绱㈠紩锛?
CREATE INDEX IDX1_OBJECT_ID ON T(OBJECT_ID);
COUNT(*)銆丼UM銆丄VG浼樺寲锛?
鏀逛负COUNT(OBJECT_ID)鏌ヨ锛屼絾鏄繀椤讳繚璇丱BJECT_ID鍒楅潪绌恒€?

鍙敤濡備笅鏂规硶鍛婄煡oracle鍙蛋IDX1_OBJECT_ID绱㈠紩锛?
1銆丼ELECT COUNT(OBJECT_ID) FROM T WHERE OBJECT_ID IS NOT NULL;
2銆佽缃瓧娈甸潪绌?
MAX/MIN浼樺寲锛?
鏍规嵁绗笁涓壒鎬ф湁搴忔帓鍒楋紝鎵€浠AX/MIN鐨勬煡璇唬浠蜂細闈炲父灏忋€?
SELECT MAX(OBJECT_ID) FROM T; 涓嶉渶鍔犱笂IS NOT NULL; 浣跨敤鎵ц璁″垝锛欼NDEX FULL SCAN(MIN/MAX);
ORDER BY銆丏ISTINCT鎺掑簭浼樺寲锛?
SELECT * FROM T WHERE OBJECT_ID < 100 ORDER BY OBJECT_ID;
鏈缓绔嬬储寮曠殑鎯呭喌涓嬩細杩涜鎺掑簭浜х敓TEMPSPC;
寤虹珛绱㈠紩鐨勬儏鍐典笅涓嶉渶瑕佷骇鐢熸帓搴?浼氫娇鐢↖DX1_OBJECT_ID绱㈠紩

浣嶅浘绱㈠紩
鍒涘缓璇硶锛?
CREATE BITMAP INDEX IDX_BITM_T_STATUS ON T(STATUS);
閫傜敤鍦ㄦ洿鏂伴潪甯稿皯鐨勮〃锛屽缓绔嬪湪閲嶅搴﹁緝楂樼殑鍒?鎬у埆)
瀛樺偍缁撴瀯锛?
浣嶅浘绱㈠紩瀛樺偍鐨勬槸姣旂壒浣嶅€?

鍑芥暟绱㈠紩锛?
CREATE TABLE T AS SELECT * FROM DBA_OBJECT;
CREATE INDEX IDX_OBJECT_ID ON T(OBJECT_ID);
CREATE INDEX IDX_OBJECT_NAME ON T(OBJECT_NAME);
CREATE INDEX IDX_CREATED ON T(CREATED);
SELECT * FROM T WHERE UPPER(OBJECT_NAME) = 'T';

鏅€氱殑BTREE绱㈠紩锛屽鏋滃湪瀵瑰垪鍋氳繍绠楃殑鏉′欢涓嬫槸鏃犳硶浣跨敤绱㈠紩鏌ヨ鐨勶紝浼氫娇鐢═ABLE ACCESS FULL;
鍒涘缓璇彞锛?
CREATE INDEX IDX_UPPER_OBJ_NAME ON(UPPER(OBJECT_NAME));
SELECT INDEX_NAME, INDEX_TYPE FROM USER_INDEXES WHERE TABLE_NAME = 'T';
鍑芥暟绱㈠紩鐨凾YPE鏄細FUNCTION-BASED NORMAL;
鍑芥暟绱㈠紩鐨刢ost姣斿叏琛ㄦ壂鎻忚灏忥紝浣嗘槸姣旀櫘閫氱殑绱㈠紩瑕佸ぇ鐨勫銆?
SELECT * FROM T WHERE OBJECT_ID - 10<30;

杩欐椂鍊欏鏋滃湪object_id鍒楀缓绔嬫櫘閫氱储寮曟椂鏃犳硶浣跨敤鐨勩€俹racle浼氶粯璁や娇鐢ㄥ叏琛ㄦ壂鎻忕殑鏂瑰紡杩涜鏌ヨ銆傚彲鏈変互涓嬩袱涓€濊矾杩涜浼樺寲锛?
1銆丼ELECT * FROM T WHERE OBEJCT_ID < 40;
2銆佸湪OBJECT_ID - 10涓婂缓绔嬪嚱鏁扮储寮?
鍐檚ql鏃惰娉ㄦ剰瑙勮寖锛屽緢澶氳鍙ユ槸绛変环鐨勩€?
SELECT * FROM T WHERE SUBSTR(OBJECT_NAME,1锛?) = 'CLUS'聽 =聽 聽 SELECT * FROM T WHERE OBJECT_NAME LIKE 'CLUS%';
SELECT * FROM T WHERE TRUNC(CREATED) >= TO_DATE('2012-10-02', 'YYYY-MM-DD') AND TRUNC(CREATED) <= TO_DATE('2012-10-03','YYYY-MM-DD')
=
SELECT * FROM T WHERE CREATED >= TO_DATE('2012-10-02', 'YYYY-MM-DD') AND CREATED < TO_DATE('2012-10-03','YYYY-MM-DD')+1;

Oracle 绱㈠紩 璇﹁В
涓€锛?绱㈠紩浠嬬粛
聽1.1聽 绱㈠紩鐨勫垱寤?璇硶 锛?聽
CREATE聽UNIUQE聽|聽BITMAP聽INDEX聽<schema>.<index_name>
聽聽聽聽聽聽 ON聽<schema>.<table_name>
聽聽聽聽聽聽聽聽聽聽 聽(<column_name>聽|聽<expression>聽ASC聽|聽DESC,
聽聽聽 聽聽聽聽聽聽聽 聽聽<column_name>聽|聽<expression>聽ASC聽|聽DESC,...)
聽聽聽聽 TABLESPACE聽<tablespace_name>
聽聽聽聽 STORAGE聽<storage_settings>
聽聽聽聽 LOGGING聽|聽NOLOGGING
聽聽聽 COMPUTE聽STATISTICS
聽聽聽聽 NOCOMPRESS聽|聽COMPRESS<nn>
聽聽聽聽 NOSORT聽|聽REVERSE
聽聽聽聽 PARTITION聽|聽GLOBAL聽PARTITION<partition_setting>

鐩稿叧璇存槑
1锛壜?UNIQUE聽|聽BITMAP 锛氭寚瀹歎NIQUE 涓哄敮涓€鍊肩储寮曪紝 BITMAP 涓轰綅鍥剧储寮曪紝 鐪佺暐涓築-Tree 绱㈠紩銆?
2锛?<column_name>聽|聽<expression>聽ASC聽|聽DESC 锛氬彲浠ュ澶氬垪杩涜鑱斿悎绱㈠紩锛屽綋涓篹xpression 鏃跺嵆 鈥?鍩轰簬鍑芥暟鐨勭储寮?鈥?
3锛?TABLESPACE 锛氭寚瀹氬瓨鏀剧储寮曠殑琛ㄧ┖闂?(绱㈠紩鍜屽師琛ㄤ笉鍦ㄤ竴涓〃绌洪棿鏃舵晥鐜囨洿楂?)
4锛?STORAGE 锛氬彲杩涗竴姝ヨ缃〃绌洪棿鐨勫瓨鍌ㄥ弬鏁?
5锛?LOGGING聽|聽NOLOGGING 锛氭槸鍚﹀绱㈠紩浜х敓閲嶅仛鏃ュ織( 瀵瑰ぇ琛ㄥ敖閲忎娇鐢?NOLOGGING 鏉ュ噺灏戝崰鐢ㄧ┖闂村苟鎻愰珮鏁堢巼 )
6锛?COMPUTE聽STATISTICS 锛氬垱寤烘柊绱㈠紩鏃舵敹闆嗙粺璁′俊鎭?
7锛?NOCOMPRESS聽|聽COMPRESS<nn> 锛氭槸鍚︿娇鐢ㄢ€?閿帇缂?鈥? 浣跨敤閿帇缂╁彲浠ュ垹闄や竴涓敭鍒椾腑鍑虹幇鐨勯噸澶嶅€?)
8锛?NOSORT聽|聽REVERSE 锛歂OSORT 琛ㄧず涓庤〃涓浉鍚岀殑椤哄簭鍒涘缓绱㈠紩锛?REVERSE 琛ㄧず鐩稿弽椤哄簭瀛樺偍绱㈠紩鍊?
9锛?PARTITION聽|聽NOPARTITION 锛氬彲浠ュ湪 鍒嗗尯琛?鍜屾湭鍒嗗尯琛ㄤ笂瀵瑰垱寤虹殑绱㈠紩杩涜鍒嗗尯


1. 2 聽绱㈠紩鐗圭偣锛?聽
绗竴 锛岄€氳繃鍒涘缓鍞竴鎬х储寮曪紝鍙互淇濊瘉鏁版嵁搴撹〃涓瘡涓€琛屾暟鎹殑鍞竴鎬с€偮?
绗簩 锛屽彲浠ュぇ澶у姞蹇暟鎹殑妫€绱㈤€熷害锛岃繖涔熸槸鍒涘缓绱㈠紩鐨勬渶涓昏鐨勫師鍥犮€偮?
绗笁 锛屽彲浠ュ姞閫熻〃鍜岃〃涔嬮棿鐨勮繛鎺ワ紝鐗瑰埆鏄湪瀹炵幇鏁版嵁鐨勫弬鑰冨畬鏁存€ф柟闈㈢壒鍒湁鎰忎箟銆偮?
绗洓 锛屽湪浣跨敤鍒嗙粍鍜屾帓搴忓瓙鍙ヨ繘琛屾暟鎹绱㈡椂锛屽悓鏍峰彲浠ユ樉钁楀噺灏戞煡璇腑鍒嗙粍鍜屾帓搴忕殑鏃堕棿銆偮?
绗簲 锛岄€氳繃浣跨敤绱㈠紩锛屽彲浠ュ湪鏌ヨ鐨勮繃绋嬩腑锛屼娇鐢ㄤ紭鍖栭殣钘忓櫒锛屾彁楂樼郴缁熺殑鎬ц兘銆偮?


1. 3 聽绱㈠紩涓嶈冻锛?
绗竴 锛屽垱寤虹储寮曞拰缁存姢绱㈠紩瑕佽€楄垂鏃堕棿锛岃繖绉嶆椂闂撮殢鐫€鏁版嵁閲忕殑澧炲姞鑰屽鍔犮€偮?
绗簩 锛岀储寮曢渶瑕佸崰鐗╃悊绌洪棿锛岄櫎浜嗘暟鎹〃鍗犳暟鎹┖闂翠箣澶栵紝姣忎竴涓储寮曡繕瑕佸崰涓€瀹氱殑鐗╃悊绌洪棿锛屽鏋滆寤虹珛鑱氱皣绱㈠紩锛岄偅涔堥渶瑕佺殑绌洪棿灏变細鏇村ぇ銆偮?
绗笁 锛屽綋瀵硅〃涓殑鏁版嵁杩涜澧炲姞銆佸垹闄ゅ拰淇敼鐨勬椂鍊欙紝绱㈠紩涔熻鍔ㄦ€佺殑缁存姢锛岃繖鏍峰氨闄嶄綆浜嗘暟鎹殑缁存姢閫熷害銆偮?


1. 4 聽搴旇寤虹储寮曞垪鐨勭壒鐐癸細
1锛?鍦ㄧ粡甯搁渶瑕佹悳绱㈢殑鍒椾笂锛屽彲浠ュ姞蹇悳绱㈢殑閫熷害锛浡?
2锛?鍦ㄤ綔涓轰富閿殑鍒椾笂锛屽己鍒惰鍒楃殑鍞竴鎬у拰缁勭粐琛ㄤ腑鏁版嵁鐨勬帓鍒楃粨鏋勶紱聽
3锛?鍦ㄧ粡甯哥敤鍦ㄨ繛鎺ョ殑鍒椾笂锛岃繖浜涘垪涓昏鏄竴浜涘閿紝鍙互鍔犲揩杩炴帴鐨勯€熷害锛浡?
4锛?鍦ㄧ粡甯搁渶瑕佹牴鎹寖鍥磋繘琛屾悳绱㈢殑鍒椾笂鍒涘缓绱㈠紩锛屽洜涓虹储寮曞凡缁忔帓搴忥紝鍏舵寚瀹氱殑鑼冨洿鏄繛缁殑锛浡?
5锛?鍦ㄧ粡甯搁渶瑕佹帓搴忕殑鍒椾笂鍒涘缓绱㈠紩锛屽洜涓虹储寮曞凡缁忔帓搴忥紝杩欐牱鏌ヨ鍙互鍒╃敤绱㈠紩鐨勬帓搴忥紝鍔犲揩鎺掑簭鏌ヨ鏃堕棿锛浡?
6锛?鍦ㄧ粡甯镐娇鐢ㄥ湪WHERE 瀛愬彞涓殑鍒椾笂闈㈠垱寤虹储寮曪紝鍔犲揩鏉′欢鐨勫垽鏂€熷害銆偮?


1. 5 聽涓嶅簲璇ュ缓绱㈠紩鍒楃殑鐗圭偣锛?
绗竴 锛屽浜庨偅浜涘湪鏌ヨ涓緢灏戜娇鐢ㄦ垨鑰呭弬鑰冪殑鍒椾笉搴旇鍒涘缓绱㈠紩銆傝繖鏄洜涓猴紝鏃㈢劧杩欎簺鍒楀緢灏戜娇鐢ㄥ埌锛屽洜姝ゆ湁绱㈠紩鎴栬€呮棤绱㈠紩锛屽苟涓嶈兘鎻愰珮鏌ヨ閫熷害銆傜浉鍙嶏紝鐢变簬澧炲姞浜嗙储寮曪紝鍙嶈€岄檷浣庝簡绯荤粺鐨勭淮鎶ら€熷害鍜屽澶т簡绌洪棿闇€姹傘€偮?
绗簩 锛屽浜庨偅浜涘彧鏈夊緢灏戞暟鎹€肩殑鍒椾篃涓嶅簲璇ュ鍔犵储寮曘€傝繖鏄洜涓猴紝鐢变簬杩欎簺鍒楃殑鍙栧€煎緢灏戯紝渚嬪浜轰簨琛ㄧ殑鎬у埆鍒楋紝鍦ㄦ煡璇㈢殑缁撴灉涓紝缁撴灉闆嗙殑鏁版嵁琛屽崰浜嗚〃涓暟鎹鐨勫緢澶ф瘮渚嬶紝鍗抽渶瑕佸湪琛ㄤ腑鎼滅储鐨勬暟鎹鐨勬瘮渚嬪緢澶с€傚鍔犵储寮曪紝骞朵笉鑳芥槑鏄惧姞蹇绱㈤€熷害銆偮?
绗笁 锛屽浜庨偅浜涘畾涔変负 blob 鏁版嵁绫诲瀷鐨勫垪涓嶅簲璇ュ鍔犵储寮曘€傝繖鏄洜涓猴紝杩欎簺鍒楃殑鏁版嵁閲忚涔堢浉褰撳ぇ锛岃涔堝彇鍊煎緢灏戙€偮?
绗洓 锛屽綋淇敼鎬ц兘杩滆繙澶т簬妫€绱㈡€ц兘鏃讹紝涓嶅簲璇ュ垱寤虹储寮曘€傝繖鏄洜涓猴紝淇敼鎬ц兘鍜屾绱㈡€ц兘鏄簰鐩哥煕鐩剧殑銆傚綋澧炲姞绱㈠紩鏃讹紝浼氭彁楂樻绱㈡€ц兘锛屼絾鏄細闄嶄綆淇敼鎬ц兘銆傚綋鍑忓皯绱㈠紩鏃讹紝浼氭彁楂樹慨鏀规€ц兘锛岄檷浣庢绱㈡€ц兘銆傚洜姝わ紝褰撲慨鏀规€ц兘杩滆繙澶т簬妫€绱㈡€ц兘鏃讹紝涓嶅簲璇ュ垱寤虹储寮曘€偮?


1.6聽 闄愬埗绱㈠紩
闄愬埗绱㈠紩鏄竴浜涙病鏈夌粡楠岀殑寮€鍙戜汉鍛樼粡甯哥姱鐨勯敊璇箣涓€銆傚湪SQL 涓湁寰堝闄烽槺浼氫娇涓€浜涚储寮曟棤娉曚娇鐢ㄣ€備笅闈㈣璁轰竴浜涘父瑙佺殑闂锛?
聽聽 聽 1.6.1聽聽 浣跨敤涓嶇瓑浜庢搷浣滅锛?lt;> 銆?!= 锛?聽聽聽聽聽聽
聽聽 聽 涓嬮潰鐨勬煡璇㈠嵆浣垮湪cust_rating 鍒楁湁涓€涓储寮曪紝鏌ヨ璇彞浠嶇劧鎵ц涓€娆″叏琛ㄦ壂鎻忋€?聽聽聽聽聽
聽聽聽select聽cust_Id,cust_name聽from聽customers聽where聽聽cust_rating聽<>聽'aa';聽聽聽聽聽聽聽聽
鎶婁笂闈㈢殑璇彞鏀规垚濡備笅鐨勬煡璇㈣鍙ワ紝杩欐牱锛屽湪閲囩敤鍩轰簬瑙勫垯鐨勪紭鍖栧櫒鑰屼笉鏄熀浜庝唬浠风殑浼樺寲鍣紙鏇存櫤鑳斤級鏃讹紝灏嗕細浣跨敤绱㈠紩銆偮犅犅犅犅犅犅犅?
聽聽select聽cust_Id,cust_name聽from聽customers聽where聽cust_rating聽<聽'aa'聽or聽cust_rating聽>聽'aa';
聽聽鐗瑰埆娉ㄦ剰锛氶€氳繃鎶婁笉绛変簬鎿嶄綔绗︽敼鎴?OR 鏉′欢锛屽氨鍙互浣跨敤绱㈠紩锛屼互閬垮厤鍏ㄨ〃鎵弿銆?
聽聽 聽 1.6. 2聽浣跨敤 IS聽NULL聽 鎴?IS聽NOT聽NULL
聽聽聽浣跨敤 IS聽NULL聽 鎴?IS聽NOT聽NULL 鍚屾牱浼氶檺鍒剁储寮曠殑浣跨敤 銆傚洜涓?NULL 鍊煎苟娌℃湁琚畾涔夈€傚湪 SQL 璇彞涓娇鐢?NULL 浼氭湁寰堝鐨勯夯鐑︺€傚洜姝ゅ缓璁紑鍙戜汉鍛樺湪寤鸿〃鏃讹紝鎶婇渶瑕佺储寮曠殑鍒楄鎴惵?NOT聽NULL 銆傚鏋滆绱㈠紩鐨勫垪鍦ㄦ煇浜涜涓瓨鍦?NULL 鍊硷紝灏变笉浼氫娇鐢ㄨ繖涓储寮曪紙闄ら潪绱㈠紩鏄竴涓綅鍥剧储寮曪紝鍏充簬浣嶅浘绱㈠紩鍦ㄧ◢鍚庡湪璇︾粏璁ㄨ锛夈€?
聽聽聽 1.6 .3聽浣跨敤鍑芥暟
聽聽聽濡傛灉涓嶄娇鐢ㄥ熀浜庡嚱鏁扮殑绱㈠紩锛岄偅涔堝湪SQL 璇彞鐨?WHERE 瀛愬彞涓瀛樺湪绱㈠紩鐨勫垪浣跨敤鍑芥暟鏃讹紝浼氫娇浼樺寲鍣ㄥ拷鐣ユ帀杩欎簺绱㈠紩銆偮?
聽 涓嬮潰鐨勬煡璇笉浼氫娇鐢ㄧ储寮曪紙鍙瀹冧笉鏄熀浜庡嚱鏁扮殑绱㈠紩锛?
聽select聽empno,ename,deptno聽from聽emp聽聽where聽聽trunc(hiredate)='01-MAY-81';
聽聽聽鎶婁笂闈㈢殑璇彞鏀规垚涓嬮潰鐨勮鍙ワ紝杩欐牱灏卞彲浠ラ€氳繃绱㈠紩杩涜鏌ユ壘銆?
select聽empno,ename,deptno聽from聽emp聽where聽聽hiredate<(to_date('01-MAY-81')+0.9999);
聽 聽1.6 .4聽姣旇緝涓嶅尮閰嶇殑鏁版嵁绫诲瀷聽聽聽聽聽聽聽
涔熸槸姣旇緝闅句簬鍙戠幇鐨勬€ц兘闂涔嬩竴銆偮犳敞鎰忎笅闈㈡煡璇㈢殑渚嬪瓙锛宎ccount_number 鏄竴涓?VARCHAR2 绫诲瀷 , 鍦?account_number 瀛楁涓婃湁绱㈠紩銆?
涓嬮潰鐨勮鍙ュ皢鎵ц鍏ㄨ〃鎵弿 锛?
聽 select聽bank_name,address,city,state,zip聽from聽banks聽where聽account_number聽=聽990354;
聽 Oracle鍙互鑷姩鎶?where 瀛愬彞鍙樻垚 to_number(account_number)=990354 锛岃繖鏍峰氨闄愬埗浜嗙储寮?鐨勪娇鐢?, 鏀规垚涓嬮潰鐨勬煡璇㈠氨鍙互浣跨敤绱㈠紩锛?
聽select聽bank_name,address,city,state,zip聽from聽banks聽where聽account_number聽='990354';
鐗瑰埆娉ㄦ剰锛?涓嶅尮閰嶇殑鏁版嵁绫诲瀷涔嬮棿姣旇緝浼氳Oracle 鑷姩闄愬埗绱㈠紩鐨勪娇鐢?, 鍗充究瀵硅繖涓煡璇㈡墽琛?Explain聽Plan 涔熶笉鑳借鎮ㄦ槑鐧戒负浠€涔堝仛浜嗕竴娆?鈥?鍏ㄨ〃鎵弿 鈥?銆?


1. 7 聽鏌ヨ 绱㈠紩
鏌ヨDBA_INDEXES 瑙嗗浘鍙緱鍒拌〃涓墍鏈夌储寮曠殑鍒楄〃锛屾敞鎰忓彧鑳介€氳繃 USER_INDEXES 鐨勬柟娉曟潵妫€绱㈡ā寮?(schema) 鐨勭储寮曘€傝闂?USER_IND_COLUMNS 瑙嗗浘鍙緱鍒颁竴涓粰瀹氳〃涓绱㈠紩鐨勭壒瀹氬垪銆?

1. 8 聽 缁勫悎绱㈠紩
褰撴煇涓储寮曞寘鍚湁澶氫釜宸茬储寮曠殑鍒楁椂锛岀О杩欎釜绱㈠紩涓?缁勫悎锛坈oncatented 锛夌储寮?銆傚湪聽Oracle9i 寮曞叆璺宠穬寮忔壂鎻忕殑绱㈠紩璁块棶鏂规硶涔嬪墠锛屾煡璇㈠彧鑳藉湪鏈夐檺鏉′欢涓嬩娇鐢ㄨ绱㈠紩銆傛瘮濡傦細琛?emp 鏈変竴涓粍鍚堢储寮曢敭锛岃绱㈠紩鍖呭惈浜?empno 銆伮?ename 鍜?deptno 銆傚湪 Oracle9i 涔嬪墠闄ら潪鍦?where 涔嬪彞涓绗竴鍒楋紙 empno 锛夋寚瀹氫竴涓€硷紝鍚﹀垯灏变笉鑳戒娇鐢ㄨ繖涓储寮曢敭杩涜涓€娆¤寖鍥存壂鎻忋€?
聽聽 聽鐗瑰埆娉ㄦ剰锛氬湪Oracle9i 涔嬪墠锛屽彧鏈夊湪浣跨敤鍒扮储寮曠殑鍓嶅绱㈠紩鏃舵墠鍙互浣跨敤缁勫悎绱㈠紩锛?

1. 9 聽ORACLE聽ROWID
閫氳繃姣忎釜琛岀殑ROWID 锛岀储寮?Oracle 鎻愪緵浜嗚闂崟琛屾暟鎹殑鑳藉姏銆?ROWID 鍏跺疄灏辨槸鐩存帴鎸囧悜鍗曠嫭琛岀殑绾胯矾鍥俱€傚鏋滄兂妫€鏌ラ噸澶嶅€兼垨鏄叾浠栧 ROWID 鏈韩鐨勫紩鐢紝鍙互鍦ㄤ换浣曡〃涓娇鐢ㄥ拰鎸囧畾 rowid 鍒椼€?

1.10聽 閫夋嫨鎬?
聽聽聽浣跨敤USER_INDEXES 瑙嗗浘锛岃瑙嗗浘涓樉绀轰簡涓€涓?distinct_keys 鍒椼€傛瘮杈冧竴涓嬪敮涓€閿殑鏁伴噺鍜岃〃涓殑琛屾暟锛屽氨鍙互鍒ゆ柇绱㈠紩鐨勯€夋嫨鎬с€傞€夋嫨鎬ц秺楂橈紝绱㈠紩杩斿洖鐨勬暟鎹氨瓒婂皯銆?

1.11聽 缇ら泦鍥犲瓙(Clustering聽Factor)
聽聽Clustering聽Factor浣嶄簬 USER_INDEXES 瑙嗗浘涓€傝鍒楀弽鏄犱簡鏁版嵁鐩稿浜庡凡 寤?绱㈠紩鐨勫垪鏄惁鏄惧緱鏈夊簭銆傚鏋淐lustering聽Factor 鍒楃殑鍊兼帴杩戜簬绱㈠紩涓殑鏍戝彾鍧?(leaf聽block) 鐨勬暟鐩紝琛ㄤ腑鐨勬暟鎹氨瓒婃湁搴忋€傚鏋滃畠鐨勫€兼帴杩戜簬琛ㄤ腑鐨勮鏁帮紝鍒欒〃涓殑鏁版嵁灏变笉鏄緢鏈夊簭銆?

1.12聽 浜屽厓楂樺害(Binary聽height)
聽聽绱㈠紩鐨勪簩鍏冮珮搴﹀鎶奟OWID 杩斿洖缁欑敤鎴疯繘绋嬫椂鎵€瑕佹眰鐨?I/O 閲忚捣鍒板叧閿綔鐢ㄣ€傚湪瀵逛竴涓储寮曡繘琛屽垎鏋愬悗锛屽彲浠ラ€氳繃鏌ヨ DBA_INDEXES 鐨?B-聽level 鍒楁煡鐪嬪畠鐨勪簩鍏冮珮搴?銆備簩鍏冮珮搴︿富瑕侀殢鐫€琛ㄧ殑澶у皬浠ュ強琚储寮曠殑鍒椾腑鍊肩殑鑼冨洿鐨勭嫮绐勭▼搴﹁€屽彉鍖栥€傜储寮曚笂濡傛灉鏈夊ぇ閲忚鍒犻櫎鐨勮锛屽畠鐨勪簩鍏冮珮搴︿篃浼氬鍔犮€傛洿鏂扮储寮曞垪涔熺被浼间簬鍒犻櫎鎿嶄綔锛屽洜涓哄畠澧炲姞浜嗗凡鍒犻櫎閿殑鏁扮洰銆?閲嶅缓绱㈠紩鍙兘浼氶檷浣庝簩鍏冮珮搴?銆?

1.13 聽蹇€熷叏灞€鎵弿
聽聽 浠?Oracle7.3鍚庡氨鍙互浣跨敤蹇€熷叏灞€鎵弿 (Fast聽Full聽Scan) 杩欎釜閫夐」銆傝繖涓€夐」鍏佽 Oracle 鎵ц涓€涓叏灞€绱㈠紩鎵弿鎿嶄綔銆傚揩閫熷叏灞€鎵弿璇诲彇 B- 鏍戠储寮曚笂鎵€鏈夋爲鍙跺潡銆傚垵濮嬪寲鏂囦欢涓殑聽 DB_FILE_MULTIBLOCK_READ_COUNT 鍙傛暟鍙互鎺у埗鍚屾椂琚鍙栫殑鍧楃殑鏁扮洰銆?

1.14 聽璺宠穬寮忔壂鎻?
聽聽浠嶰racle9i 寮€濮嬶紝绱㈠紩璺宠穬寮忔壂鎻忕壒鎬у彲浠ュ厑璁镐紭鍖栧櫒浣跨敤缁勫悎绱㈠紩锛屽嵆渚跨储寮曠殑鍓嶅鍒楁病鏈夊嚭鐜板湪 WHERE 瀛愬彞涓€傜储寮曡烦璺冨紡鎵弿姣斿叏绱㈠紩鎵弿 瑕佸揩鐨勫銆?

涓嬮潰鐨?姣旇緝浠栦滑鐨勫尯鍒?锛?
SQL>聽set聽timing聽on
SQL>聽create聽index聽TT_index聽on聽TT(teamid,areacode);
绱㈠紩宸插垱寤恒€?
宸茬敤鏃堕棿:聽聽00:聽02:聽03.93
SQL>聽select聽count(areacode)聽from聽tt;
COUNT(AREACODE)
---------------
聽7230369
宸茬敤鏃堕棿:聽聽00:聽00:聽08.31
SQL>聽select聽 /*+聽index(tt聽TT_index聽)*/聽 count(areacode)聽from聽tt;
COUNT(AREACODE)
---------------
7230369
宸茬敤鏃堕棿:聽聽00:聽00:聽07.37

1.15 聽绱㈠紩鐨勭被鍨?
B-鏍戠储寮暵犅犅?聽
浣嶅浘绱㈠紩聽 聽
HASH绱㈠紩聽 聽聽
绱㈠紩缂栨帓琛犅?
鍙嶈浆閿储寮?
鍩轰簬鍑芥暟鐨勭储寮?
鍒嗗尯绱㈠紩
鏈湴鍜屽叏灞€绱㈠紩





浜岋紟聽绱㈠紩鍒嗙被
Oracle鎻愪緵浜嗗ぇ閲忕储寮曢€夐」銆傜煡閬撳湪缁欏畾鏉′欢涓嬩娇鐢ㄥ摢涓€夐」瀵逛簬涓€涓簲鐢ㄧ▼搴忕殑鎬ц兘鏉ヨ闈炲父閲嶈銆備竴涓敊璇殑閫夋嫨鍙兘浼氬紩鍙戞閿侊紝骞跺鑷存暟鎹簱鎬ц兘鎬ュ墽涓嬮檷鎴栬繘绋嬬粓姝€傝€屽鏋滃仛鍑烘纭殑閫夋嫨锛屽垯鍙互鍚堢悊浣跨敤璧勬簮锛屼娇閭d簺宸茬粡杩愯浜嗗嚑涓皬鏃剁敋鑷冲嚑澶╃殑杩涚▼鍦ㄥ嚑鍒嗛挓寰椾互瀹屾垚锛岃繖鏍蜂細浣挎偍绔嬪埢鎴愪负涓€浣嶈嫳闆勩€?涓嬮潰 灏卞皢绠€鍗曠殑璁ㄨ姣忎釜绱㈠紩閫夐」銆?

涓嬮潰璁ㄨ鐨勭储寮曠被鍨嬶細
B鏍戠储寮?(榛樿绫诲瀷 )
浣嶅浘绱㈠紩
HASH绱㈠紩
绱㈠紩缁勭粐琛ㄧ储寮?
鍙嶈浆閿?reverse聽key) 绱㈠紩
鍩轰簬鍑芥暟鐨勭储寮?
鍒嗗尯绱㈠紩( 鏈湴鍜屽叏灞€绱㈠紩 )
浣嶅浘杩炴帴绱㈠紩

2.1聽聽B鏍戠储寮?聽 (榛樿绫诲瀷 )
聽 B鏍戠储寮曞湪 Oracle 涓槸涓€涓€氱敤绱㈠紩銆傚湪鍒涘缓绱㈠紩鏃跺畠灏辨槸榛樿鐨勭储寮曠被鍨?銆?B 鏍戠储寮曞彲浠ユ槸涓€涓垪鐨?( 绠€鍗?) 绱㈠紩锛屼篃鍙互鏄粍鍚?/ 澶嶅悎 ( 澶氫釜鍒?) 鐨勭储寮曘€?B 鏍戠储寮曟渶澶氬彲浠ュ寘鎷?32 鍒?銆?
鍦?涓嬪浘 鐨勪緥瀛愪腑锛孊 鏍戠储寮曚綅浜庨泧鍛樿〃鐨?last_name 鍒椾笂銆傝繖涓储寮曠殑浜屽厓楂樺害涓?3 锛涙帴涓嬫潵锛?Oracle 浼氱┛杩囦袱涓爲鏋濆潡 (branch聽block) 锛屽埌杈惧寘鍚湁 ROWID 鐨勬爲鍙跺潡銆傚湪姣忎釜鏍戞灊鍧椾腑锛屾爲鏋濊鍖呭惈閾句腑涓嬩竴涓潡鐨?ID 鍙枫€?
鏍戝彾鍧楀寘鍚?浜?绱㈠紩鍊?銆?ROWID 锛屼互鍙婃寚鍚戝墠涓€涓拰鍚庝竴涓爲鍙跺潡鐨?鎸囬拡 銆侽racle 鍙互浠庝袱涓柟鍚戦亶鍘嗚繖涓簩鍙夋爲銆?B 鏍戠储寮曚繚瀛樹簡鍦ㄧ储寮曞垪涓婃湁鍊肩殑姣忎釜鏁版嵁琛岀殑 ROWID 鍊笺€?Oracle涓嶄細瀵圭储寮曞垪涓婂寘鍚?NULL 鍊肩殑琛岃繘琛岀储寮?銆傚鏋滅储寮曟槸澶氫釜鍒楃殑缁勫悎绱㈠紩锛岃€屽叾涓垪涓婂寘鍚玁ULL 鍊硷紝杩欎竴琛屽氨浼氬浜庡寘鍚?NULL 鍊肩殑绱㈠紩鍒椾腑锛屼笖灏嗚澶勭悊涓虹┖ ( 瑙嗕负 NULL) 銆?
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 

鎶€宸?锛?绱㈠紩鍒楃殑鍊奸兘瀛樺偍鍦ㄧ储寮曚腑銆傚洜姝わ紝鍙互寤虹珛涓€涓粍鍚?( 澶嶅悎 ) 绱㈠紩锛岃繖浜涚储寮曞彲浠ョ洿鎺ユ弧瓒虫煡璇紝鑰屼笉鐢ㄨ闂〃銆傝繖灏变笉鐢ㄤ粠琛ㄤ腑妫€绱㈡暟鎹紝浠庤€屽噺灏戜簡 I/O 閲忋€?

B-tree 聽鐗圭偣 锛?
閫傚悎涓庡ぇ閲忕殑澧炪€佸垹銆佹敼锛圤LTP 锛?
涓嶈兘鐢ㄥ寘鍚玂R 鎿嶄綔绗︾殑鏌ヨ锛?
閫傚悎楂樺熀鏁扮殑鍒楋紙鍞竴鍊煎锛?
鍏稿瀷鐨勬爲鐘剁粨鏋勶紱
姣忎釜缁撶偣閮芥槸鏁版嵁鍧楋紱
澶у閮芥槸鐗╃悊涓婁竴灞傘€佷袱灞傛垨涓夊眰涓嶅畾锛岄€昏緫涓婁笁灞傦紱
鍙跺瓙鍧楁暟鎹槸鎺掑簭鐨勶紝浠庡乏鍚戝彸閫掑锛?
鍦ㄥ垎鏀潡鍜屾牴鍧椾腑鏀剧殑鏄储寮曠殑鑼冨洿锛?


2.2聽聽浣嶅浘绱㈠紩
浣嶅浘绱㈠紩闈炲父閫傚悎浜庡喅绛栨敮鎸佺郴缁?Decision聽Support聽System 锛?DSS) 鍜屾暟鎹粨搴?锛屽畠浠笉搴旇鐢ㄤ簬閫氳繃浜嬪姟澶勭悊搴旂敤绋嬪簭璁块棶鐨勮〃銆傚畠浠彲浠ヤ娇鐢ㄨ緝灏戝埌涓瓑鍩烘暟( 涓嶅悓鍊肩殑鏁伴噺 ) 鐨勫垪璁块棶闈炲父澶х殑琛ㄣ€傚敖绠′綅鍥剧储寮曟渶澶氬彲杈?30 涓垪锛屼絾閫氬父瀹冧滑閮藉彧鐢ㄤ簬灏戦噺鐨勫垪銆?
渚嬪锛屾偍鐨勮〃鍙兘鍖呭惈涓€涓О涓篠ex 鐨勫垪锛屽畠鏈変袱涓彲鑳藉€硷細鐢峰拰濂炽€傝繖涓熀鏁板彧涓?2 锛屽鏋滅敤鎴烽绻佸湴鏍规嵁 Sex 鍒楃殑鍊兼煡璇㈣琛紝杩欏氨鏄綅鍥剧储寮曠殑鍩哄垪銆傚綋涓€涓〃鍐呭寘鍚簡澶氫釜浣嶅浘绱㈠紩鏃讹紝鎮ㄥ彲浠ヤ綋浼氬埌浣嶅浘绱㈠紩鐨勭湡姝e▉鍔涖€傚鏋滄湁澶氫釜鍙敤鐨勪綅鍥剧储寮曪紝 Oracle 灏卞彲浠ュ悎骞朵粠姣忎釜浣嶅浘绱㈠紩寰楀埌鐨勭粨鏋滈泦锛屽揩閫熷垹闄や笉蹇呰鐨勬暟鎹€?

Bitmap t聽鐗圭偣 锛?
閫傚悎涓庡喅绛栨敮鎸佺郴缁燂紱
鍋歎PDATE 浠d环闈炲父楂橈紱
闈炲父閫傚悎OR 鎿嶄綔绗︾殑鏌ヨ锛?
鍩烘暟姣旇緝灏戠殑鏃跺€欐墠鑳藉缓浣嶅浘绱㈠紩锛?

鎶€宸э細 瀵逛簬鏈夎緝浣庡熀鏁扮殑鍒楅渶瑕佷娇鐢ㄤ綅鍥剧储寮曘€傛€у埆鍒楀氨鏄繖鏍蜂竴涓緥瀛愶紝瀹冩湁涓や釜鍙兘鍊硷細鐢锋垨濂? 鍩烘暟浠呬负 2) 銆?浣嶅浘瀵逛簬浣庡熀鏁? 灏戦噺鐨勪笉鍚屽€?) 鍒楁潵璇撮潪甯稿揩 锛岃繖鏄洜涓虹储寮曠殑灏哄鐩稿浜嶣 鏍戠储寮曟潵璇村皬浜嗗緢澶氥€傚洜涓鸿繖浜涚储寮曟槸浣庡熀鏁扮殑 B 鏍戠储寮曪紝鎵€浠ラ潪甯稿皬锛屽洜姝ゆ偍鍙互缁忓父妫€绱㈣〃涓秴杩囧崐鏁扮殑琛岋紝骞朵笖浠嶄娇鐢ㄤ綅鍥剧储寮曘€?
褰撳ぇ澶氭暟鏉$洰涓嶄細鍚戜綅鍥炬坊鍔犳柊鐨勫€兼椂锛屼綅鍥剧储寮曞湪鎵瑰鐞? 鍗曠敤鎴?) 鎿嶄綔涓姞杞借〃 ( 鎻掑叆鎿嶄綔 ) 鏂归潰閫氬父瑕佹瘮 B 鏍戝仛寰楀ソ銆傚綋澶氫釜浼氳瘽鍚屾椂鍚戣〃涓彃鍏ヨ鏃朵笉搴旇浣跨敤浣嶅浘绱㈠紩锛屽湪澶у鏁颁簨鍔″鐞嗗簲鐢ㄧ▼搴忎腑閮戒細鍙戠敓杩欑鎯呭喌銆?

绀轰緥
涓嬮潰鏉ョ湅涓€涓ず渚嬭〃PARTICIPANT 锛岃琛ㄥ寘鍚簡鏉ヨ嚜涓汉鐨勮皟鏌ユ暟鎹€傚垪 Age_Code 銆?Income_Level 銆?Education_Level 鍜?Marital_Status 閮藉寘鎷簡鍚勮嚜鐨勪綅鍥剧储寮曘€?涓嬪浘 鏄剧ず浜嗘瘡涓洿鏂瑰浘涓殑鏁版嵁骞宠 鎯呭喌锛屼互鍙婂璁块棶姣忎釜浣嶅浘绱㈠紩鐨勬煡璇㈢殑鎵ц璺緞銆傚浘涓殑鎵ц璺緞鏄剧ず浜嗘湁澶氬皯涓綅鍥剧储寮曡鍚堝苟锛屽彲浠ョ湅鍑烘€ц兘寰楀埌浜嗘樉钁楃殑鎻愰珮銆?




濡?涓婂浘 鍥炬墍绀猴紝浼樺寲鍣ㄤ緷娆′娇鐢? 涓崟鐙殑浣嶅浘绱㈠紩锛岃繖浜涚储寮曠殑鍒楀湪 WHERE 瀛愬彞涓寮曠敤銆傛瘡涓綅鍥捐褰曟寚閽?( 渚嬪 0 鎴?1) 锛岀敤浜庢寚绀鸿〃涓殑鍝簺琛屽寘鍚綅鍥句腑鐨勫凡鐭ュ€笺€傛湁浜嗚繖浜涗俊鎭悗锛?Oracle 灏辨墽琛?BITMAP聽AND 鎿嶄綔浠ユ煡鎵惧皢浠庢墍鏈?4 涓綅鍥句腑杩斿洖鍝簺琛屻€傝鍊肩劧鍚庤杞崲涓?ROWID 鍊硷紝骞朵笖鏌ヨ缁х画瀹屾垚鍓╀綑鐨勫鐞嗗伐浣溿€?娉ㄦ剰锛屾墍鏈? 涓垪閮芥湁闈炲父浣庣殑鍩烘暟锛屼娇鐢ㄧ储寮曞彲浠ラ潪甯稿揩閫熷湴杩斿洖鍖归厤鐨勮銆?

鎶€宸э細 鍦ㄤ竴涓煡璇腑鍚堝苟澶氫釜浣嶅浘绱㈠紩鍚庯紝鍙互浣挎€ц兘鏄捐憲鎻愰珮銆備綅鍥剧储寮曚娇鐢ㄥ浐瀹氶暱搴︾殑鏁版嵁绫诲瀷瑕佹瘮鍙彉闀垮害鐨勬暟鎹被鍨嬪ソ銆傝緝澶у昂瀵哥殑鍧椾篃浼氭彁楂樺浣嶅浘绱㈠紩鐨勫瓨鍌ㄥ拰璇诲彇鎬ц兘銆?

涓嬮潰鐨勬煡璇㈠彲鏄剧ず绱㈠紩绫诲瀷銆?
SQL>聽select聽index_name,聽index_type聽from聽user_indexes;
INDEX_NAME聽聽聽聽聽聽聽聽聽INDEX_TYPE
------------------------------聽----------------------
TT_INDEX聽聽聽聽聽聽聽聽聽聽聽聽NORMAL
IX_CUSTADDR_TP聽聽聽聽NORMAL
B鏍戠储寮?浣滀负NORMAL 鍒楀嚭锛涜€?浣嶅浘绱㈠紩 鐨勭被鍨嬪€间负 BITMAP 銆?

鎶€宸э細 濡傛灉瑕佹煡璇綅鍥剧储寮曞垪琛紝鍙互鍦║SER聽_INDEXES 瑙嗗浘涓煡璇?index_type 鍒椼€?
寤鸿涓嶈鍦ㄤ竴浜涜仈鏈轰簨鍔″鐞?OLTP) 搴旂敤绋嬪簭涓娇鐢ㄤ綅鍥剧储寮?銆侭 鏍戠储寮曠殑绱㈠紩鍊间腑鍖呭惈 ROWID 锛岃繖鏍?Oracle 灏卞彲浠ュ湪琛岀骇鍒笂閿佸畾绱㈠紩銆備綅鍥剧储寮曞瓨鍌ㄤ负鍘嬬缉鐨勭储寮曞€硷紝鍏朵腑鍖呭惈浜嗕竴瀹氳寖鍥寸殑 ROWID 锛屽洜姝?Oracle 蹇呴』閽堝涓€涓粰瀹氬€奸攣瀹氭墍鏈夎寖鍥村唴鐨?ROWID 銆傝繖绉嶉攣瀹氱被鍨嬪彲鑳藉湪鏌愪簺 DML 璇彞涓€犳垚姝婚攣銆?SELECT 璇彞涓嶄細鍙楀埌杩欑閿佸畾闂鐨勫奖鍝嶃€?
浣嶅浘绱㈠紩 鐨勪娇鐢?闄愬埗 锛?
鍩轰簬瑙勫垯鐨勪紭鍖栧櫒涓嶄細鑰冭檻浣嶅浘绱㈠紩銆?
褰撴墽琛孉LTER聽TABLE 璇彞骞朵慨鏀瑰寘鍚湁浣嶅浘绱㈠紩鐨勫垪鏃讹紝浼氫娇浣嶅浘绱㈠紩澶辨晥銆?
浣嶅浘绱㈠紩涓嶅寘鍚换浣曞垪鏁版嵁锛屽苟涓斾笉鑳界敤浜庝换浣曠被鍨嬬殑瀹屾暣鎬ф鏌ャ€?
浣嶅浘绱㈠紩涓嶈兘琚0鏄庝负鍞竴绱㈠紩銆?
浣嶅浘绱㈠紩鐨勬渶澶ч暱搴︿负30 銆?

鎶€宸э細 涓嶈鍦ㄧ箒閲嶇殑OLTP 鐜涓娇鐢ㄤ綅鍥剧储寮?

2.3聽聽HASH绱㈠紩
浣跨敤HASH 绱㈠紩蹇呴』瑕佷娇鐢?HASH 闆嗙兢 銆傚缓绔嬩竴涓泦缇ゆ垨HASH 闆嗙兢鐨勫悓鏃讹紝涔熷氨瀹氫箟浜嗕竴涓泦缇ら敭銆傝繖涓敭鍛婅瘔 Oracle 濡備綍鍦ㄩ泦缇や笂瀛樺偍琛ㄣ€傚湪瀛樺偍鏁版嵁鏃讹紝鎵€鏈変笌杩欎釜闆嗙兢閿浉鍏崇殑琛岄兘琚瓨鍌ㄥ湪涓€涓暟鎹簱鍧椾笂銆傚鏋滄暟鎹兘瀛樺偍鍦ㄥ悓涓€涓暟鎹簱鍧椾笂锛屽苟涓斿皢 HASH 绱㈠紩浣滀负 WHERE 瀛愬彞涓殑纭垏鍖归厤锛?Oracle 灏卞彲浠ラ€氳繃鎵ц涓€涓?HASH 鍑芥暟鍜?I/O 鏉ヨ闂暟鎹?鈥斺€?鑰岄€氳繃浣跨敤涓€涓簩鍏冮珮搴︿负 4 鐨?B 鏍戠储寮曟潵璁块棶鏁版嵁锛屽垯闇€瑕佸湪妫€绱㈡暟鎹椂浣跨敤 4 涓?I/O 銆傚 涓嬪浘 鎵€绀猴紝鍏朵腑鐨勬煡璇㈡槸涓€涓瓑浠锋煡璇紝鐢ㄤ簬鍖归厤HASH 鍒楀拰纭垏鐨勫€笺€?Oracle 鍙互蹇€熶娇鐢ㄨ鍊硷紝鍩轰簬 HASH 鍑芥暟纭畾琛岀殑鐗╃悊瀛樺偍浣嶇疆銆?
HASH绱㈠紩鍙兘鏄闂暟鎹簱涓暟鎹殑鏈€蹇柟娉曪紝浣嗗畠涔熸湁鑷韩鐨勭己鐐?銆傞泦缇ら敭涓婁笉鍚屽€肩殑鏁扮洰蹇呴』鍦ㄥ垱寤篐ASH 闆嗙兢涔嬪墠灏辫鐭ラ亾銆傞渶瑕佸湪鍒涘缓 HASH 闆嗙兢鐨勬椂鍊欐寚瀹氳繖涓€笺€備綆浼颁簡闆嗙兢閿殑涓嶅悓鍊肩殑鏁板瓧鍙兘浼氶€犳垚闆嗙兢鐨勫啿绐?( 涓や釜闆嗙兢鐨勯敭鍊兼嫢鏈夌浉鍚岀殑 HASH 鍊?) 銆傝繖绉嶅啿绐佹槸闈炲父娑堣€楄祫婧愮殑銆傚啿绐佷細閫犳垚鐢ㄦ潵瀛樺偍棰濆琛岀殑缂撳啿婧㈠嚭锛岀劧鍚庨€犳垚棰濆鐨?I/O 銆傚鏋滀笉鍚?HASH 鍊肩殑鏁扮洰宸茬粡琚綆浼帮紝鎮ㄥ氨蹇呴』鍦ㄩ噸寤鸿繖涓泦缇や箣鍚庢敼鍙樿繖涓€笺€?
ALTER聽CLUSTER鍛戒护涓嶈兘鏀瑰彉 HASH 閿殑鏁扮洰銆?HASH 闆嗙兢杩樺彲鑳芥氮璐圭┖闂?銆傚鏋滄棤娉曠‘瀹氶渶瑕佸灏戠┖闂存潵缁存姢鏌愪釜闆嗙兢閿笂鐨勬墍鏈夎锛屽氨鍙兘閫犳垚绌洪棿鐨勬氮璐广€傚鏋?涓嶈兘涓洪泦缇ょ殑鏈潵澧為暱鍒嗛厤濂介檮鍔犵殑绌洪棿 锛孒ASH 闆嗙兢鍙兘灏?涓嶆槸鏈€濂界殑閫夋嫨 銆?濡傛灉搴旂敤绋嬪簭缁忓父鍦ㄩ泦缇よ〃涓婅繘琛屽叏琛ㄦ壂鎻?锛孒ASH 闆嗙兢鍙兘涔?涓嶆槸鏈€濂界殑閫夋嫨 銆傜敱浜庨渶瑕佷负鏈潵鐨勫闀垮垎閰嶅ソ闆嗙兢鐨勫墿浣欑┖闂撮噺锛屽叏琛ㄦ壂鎻忓彲鑳介潪甯告秷鑰楄祫婧愩€?
鍦ㄥ疄鐜癏ASH 闆嗙兢涔嬪墠涓€瀹氳灏忓績銆傛偍闇€瑕佸叏闈㈠湴瑙傚療搴旂敤绋嬪簭锛屼繚璇佸湪瀹炵幇杩欎釜閫夐」涔嬪墠宸茬粡浜嗚В鍏充簬琛ㄥ拰鏁版嵁鐨勫ぇ閲忎俊鎭€?閫氬父锛孒ASH 瀵逛簬涓€浜涘寘鍚湁搴忓€肩殑闈欐€佹暟鎹潪甯告湁鏁堛€?

鎶€宸э細 HASH绱㈠紩鍦ㄦ湁闄愬埗鏉′欢 ( 闇€瑕佹寚瀹氫竴涓‘瀹氱殑鍊艰€屼笉鏄竴涓€艰寖鍥?) 鐨勬儏鍐典笅闈炲父鏈夌敤銆?
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 

2.4聽聽绱㈠紩缁勭粐琛?
绱㈠紩缁勭粐琛ㄤ細鎶婅〃鐨勫瓨鍌ㄧ粨鏋勬敼鎴怋 鏍戠粨鏋勶紝浠ヨ〃鐨勪富閿繘琛屾帓搴忋€傝繖绉嶇壒娈婄殑琛ㄥ拰鍏朵粬绫诲瀷鐨勮〃涓€鏍凤紝鍙互鍦ㄨ〃涓婃墽琛屾墍鏈夌殑 DML 鍜?DDL 璇彞銆?鐢变簬琛ㄧ殑鐗规畩缁撴瀯锛孯OWID 骞舵病鏈夎鍏宠仈鍒拌〃鐨勮涓娿€?
瀵逛簬涓€浜涙秹鍙婄簿纭尮閰嶅拰鑼冨洿鎼滅储鐨勮鍙ワ紝绱㈠紩缁勭粐琛ㄦ彁渚涗簡涓€绉嶅熀浜庨敭鐨勫揩閫熸暟鎹闂満鍒躲€?鍩轰簬涓婚敭鍊肩殑UPDATE 鍜?DELETE 璇彞鐨勬€ц兘涔熷悓鏍峰緱浠ユ彁楂橈紝 杩欐槸鍥犱负琛屽湪鐗╃悊涓婃湁搴忋€傜敱浜庨敭鍒楃殑鍊煎湪琛ㄥ拰绱㈠紩涓兘娌℃湁閲嶅锛?瀛樺偍鎵€闇€瑕佺殑绌洪棿涔熼殢涔嬪噺灏戙€?
濡傛灉涓嶄細棰戠箒鍦版牴鎹富閿垪鏌ヨ鏁版嵁锛屽垯闇€瑕佸湪绱㈠紩缁勭粐琛ㄤ腑鐨勫叾浠栧垪涓婂垱寤轰簩绾х储寮曘€備笉浼氶绻佹牴鎹富閿煡璇㈣〃鐨勫簲鐢ㄧ▼搴忎笉浼氫簡瑙e埌浣跨敤绱㈠紩缁勭粐琛ㄧ殑鍏ㄩ儴浼樼偣銆?瀵逛簬鎬绘槸閫氳繃瀵逛富閿殑绮剧‘鍖归厤鎴栬寖鍥存壂鎻忚繘琛岃闂殑琛紝灏遍渶瑕佽€冭檻浣跨敤绱㈠紩缁勭粐琛ㄣ€?

鎶€宸э細 鍙互鍦ㄧ储寮曠粍缁囪〃涓婂缓绔嬩簩绾х储寮曘€?

2.5聽聽鍙嶈浆閿储寮?
褰撹浇鍏ヤ竴浜涙湁搴忔暟鎹椂锛岀储寮曡偗瀹氫細纰板埌涓嶪/O 鐩稿叧鐨勪竴浜涚摱棰堛€傚湪鏁版嵁杞藉叆鏈熼棿锛屾煇閮ㄥ垎绱㈠紩鍜岀鐩樿偗瀹氫細姣斿叾浠栭儴鍒嗕娇鐢ㄩ绻佸緱澶氥€備负浜嗚В鍐宠繖涓棶棰橈紝鍙互鎶婄储寮曡〃绌洪棿瀛樻斁鍦ㄨ兘澶熸妸 鏂囦欢鐗╃悊鍒嗗壊鍦ㄥ涓鐩樹笂鐨勭鐩樹綋绯荤粨鏋勪笂 銆?
涓轰簡瑙e喅杩欎釜闂锛孫racle 杩樻彁渚涗簡涓€绉嶅弽杞敭绱㈠紩鐨勬柟娉曘€傚鏋滄暟鎹互鍙嶈浆閿储寮曞瓨鍌紝杩欎簺鏁版嵁鐨勫€煎氨浼氫笌鍘熷厛瀛樺偍鐨勬暟鍊肩浉鍙嶃€傝繖鏍凤紝鏁版嵁 1234 銆?1235 鍜?1236 灏辫瀛樺偍鎴?4321 銆?5321 鍜?6321 銆?缁撴灉灏辨槸绱㈠紩浼氫负姣忔鏂版彃鍏ョ殑琛屾洿鏂颁笉鍚岀殑绱㈠紩鍧椼€?

鎶€宸э細 濡傛灉鎮ㄧ殑纾佺洏瀹归噺鏈夐檺锛屽悓鏃惰繕瑕佹墽琛屽ぇ閲忕殑鏈夊簭杞藉叆锛屽氨鍙互浣跨敤鍙嶈浆閿储寮曘€?
涓嶅彲浠ュ皢鍙嶈浆閿储寮曚笌浣嶅浘绱㈠紩鎴栫储寮曠粍缁囪〃缁撳悎浣跨敤銆?鍥犱负 涓嶈兘瀵逛綅鍥剧储寮曞拰绱㈠紩缁勭粐琛ㄨ繘琛屽弽杞敭澶勭悊銆?


2.6聽聽鍩轰簬鍑芥暟鐨勭储寮?
鍙互鍦ㄨ〃涓垱寤哄熀浜庡嚱鏁扮殑绱㈠紩銆傚鏋滄病鏈夊熀浜庡嚱鏁扮殑绱㈠紩锛屼换浣曞湪鍒椾笂鎵ц浜嗗嚱鏁扮殑鏌ヨ閮戒笉鑳戒娇鐢ㄨ繖涓垪鐨勭储寮曘€備緥濡傦紝涓嬮潰鐨勬煡璇㈠氨涓嶈兘浣跨敤JOB 鍒椾笂鐨勭储寮曪紝闄ら潪瀹冩槸鍩轰簬鍑芥暟鐨勭储寮曪細
select聽* 聽 from聽emp 聽 where聽UPPER(job)聽=聽'MGR';
涓嬮潰鐨勬煡璇娇鐢↗OB 鍒椾笂鐨勭储寮曪紝浣嗘槸瀹冨皢涓嶄細杩斿洖 JOB 鍒楀叿鏈?Mgr 鎴?mgr 鍊肩殑琛岋細
select聽* 聽 from聽emp 聽 where聽job聽=聽'MGR';

鍙互鍒涘缓杩欐牱鐨勭储寮曪紝鍏佽绱㈠紩璁块棶鏀寔鍩轰簬鍑芥暟鐨勫垪鎴栨暟鎹€傚彲浠ュ鍒楄〃杈惧紡UPPER(job) 鍒涘缓绱㈠紩锛岃€屼笉鏄洿鎺ュ湪 JOB 鍒椾笂寤虹珛绱㈠紩 锛屽 锛?
create聽index聽EMP$UPPER_JOB聽on 聽 emp(UPPER(job));

灏界鍩轰簬鍑芥暟鐨勭储寮曢潪甯告湁鐢紝浣嗗湪寤虹珛瀹冧滑涔嬪墠蹇呴』鍏堣€冭檻涓嬮潰涓€浜涢棶棰橈細
鑳介檺鍒跺湪杩欎釜鍒椾笂浣跨敤鐨勫嚱鏁板悧锛熷鏋滆兘锛岃兘闄愬埗鎵€鏈夊湪杩欎釜鍒椾笂鎵ц鐨勬墍鏈夊嚱鏁板悧
鏄惁鏈夎冻澶熷簲浠橀澶栫储寮曠殑瀛樺偍绌洪棿锛?
鍦ㄦ瘡鍒椾笂澧炲姞鐨勭储寮曟暟閲忎細瀵归拡瀵硅琛ㄦ墽琛岀殑DML 璇彞鐨勬€ц兘甯︽潵浣曠褰卞搷锛?
鍩轰簬鍑芥暟鐨勭储寮曢潪甯告湁鐢紝浣嗗湪瀹炵幇鏃跺繀椤诲皬蹇冦€傚湪琛ㄤ笂鍒涘缓鐨勭储寮曡秺澶氾紝INSERT 銆?UPDATE 鍜?DELETE 璇彞鐨勬墽琛屽氨浼氳姳璐硅秺澶氱殑鏃堕棿銆?

娉ㄦ剰锛?瀵逛簬浼樺寲鍣ㄦ墍浣跨敤鐨勫熀浜庡嚱鏁扮殑绱㈠紩鏉ヨ锛?蹇呴』鎶婂垵濮嬪弬鏁癚UERY聽_REWRITE聽_聽ENABLED 璁惧畾涓?TRUE 銆?

绀轰緥锛?
select聽 聽 count(*) 聽 from聽 聽 sample 聽 where聽ratio(balance,limit)聽>.5;
Elapsed聽time:聽20.1聽minutes

create聽index聽ratio_idx1聽on 聽 sample聽(ratio(balance,聽limit));

select聽聽count(*) 聽 from聽聽sample 聽 where聽ratio(balance,limit)聽>.5;
Elapsed聽time:聽7聽seconds!!!

2.7聽聽鍒嗗尯绱㈠紩
鍒嗗尯绱㈠紩灏辨槸绠€鍗曞湴鎶婁竴涓储寮曞垎鎴愬涓墖鏂€傞€氳繃鎶婁竴涓储寮曞垎鎴愬涓墖鏂紝鍙互璁块棶鏇村皬鐨勭墖鏂? 涔熸洿蹇?) 锛屽苟涓斿彲浠ユ妸杩欎簺鐗囨柇鍒嗗埆瀛樻斁鍦ㄤ笉鍚岀殑纾佺洏椹卞姩鍣ㄤ笂 ( 閬垮厤 I/O 闂 ) 銆?B鏍戝拰浣嶅浘绱㈠紩閮藉彲浠ヨ鍒嗗尯锛岃€?HASH 绱㈠紩涓嶅彲浠ヨ鍒嗗尯 銆傚彲浠ユ湁濂藉嚑绉嶅垎鍖烘柟娉曪細 琛ㄨ鍒嗗尯鑰岀储寮曟湭琚垎鍖?锛?琛ㄦ湭琚垎鍖鸿€岀储寮曡鍒嗗尯 锛?琛ㄥ拰绱㈠紩閮借鍒嗗尯 銆備笉绠¢噰鐢ㄥ摢绉嶆柟娉曪紝 閮藉繀椤讳娇鐢ㄥ熀浜庢垚鏈殑浼樺寲鍣?銆傚垎鍖鸿兘澶熸彁渚涙洿澶氬彲浠ユ彁楂樻€ц兘鍜屽彲缁存姢鎬х殑鍙兘鎬?
鏈変袱绉嶇被鍨嬬殑鍒嗗尯绱㈠紩锛?鏈湴鍒嗗尯绱㈠紩 鍜?鍏ㄥ眬鍒嗗尯绱㈠紩 銆傛瘡涓被鍨嬮兘鏈変袱涓瓙绫诲瀷锛屾湁鍓嶇紑绱㈠紩鍜屾棤鍓嶇紑绱㈠紩銆傝〃鍚勫垪涓婄殑绱㈠紩鍙互鏈夊悇绉嶇被鍨嬬储寮曠殑缁勫悎銆?濡傛灉浣跨敤浜嗕綅鍥剧储寮曪紝灏卞繀椤绘槸鏈湴绱㈠紩 銆傛妸绱㈠紩鍒嗗尯鏈€涓昏鐨勫師鍥犳槸鍙互鍑忓皯鎵€闇€璇诲彇鐨勭储寮曠殑澶у皬锛屽彟澶栨妸鍒嗗尯鏀惧湪涓嶅悓鐨勮〃绌洪棿涓彲浠ユ彁楂樺垎鍖虹殑鍙敤鎬у拰鍙潬鎬с€?
鍦ㄤ娇鐢ㄥ垎鍖哄悗鐨勮〃鍜岀储寮曟椂锛孫racle 杩樻敮鎸佸苟琛屾煡璇㈠拰骞惰 DML 銆傝繖鏍峰氨鍙互鍚屾椂鎵ц澶氫釜杩涚▼锛屼粠鑰屽姞蹇鐞嗚繖鏉¤鍙ャ€?
2.7. 1.鏈湴鍒嗗尯绱㈠紩 ( 閫氬父浣跨敤鐨勭储寮?)
鍙互浣跨敤涓庤〃鐩稿悓鐨勫垎鍖洪敭鍜岃寖鍥寸晫闄愭潵瀵规湰鍦扮储寮曞垎鍖恒€傛瘡涓湰鍦扮储寮曠殑鍒嗗尯鍙寘鍚簡瀹冩墍鍏宠仈鐨勮〃鍒嗗尯鐨勯敭鍜孯OWID 銆傛湰鍦扮储寮曞彲浠ユ槸 B 鏍戞垨浣嶅浘绱㈠紩銆傚鏋滄槸 B 鏍戠储寮曪紝瀹冨彲浠ユ槸鍞竴鎴栦笉鍞竴鐨勭储寮曘€?
杩欑绫诲瀷鐨勭储寮曟敮鎸佸垎鍖虹嫭绔嬫€э紝杩欏氨鎰忓懗鐫€瀵逛簬鍗曠嫭鐨勫垎鍖猴紝鍙互杩涜澧炲姞銆佹埅鍙栥€佸垹闄ゃ€佸垎鍓层€佽劚鏈虹瓑澶勭悊锛岃€屼笉鐢ㄥ悓鏃跺垹闄ゆ垨閲嶅缓绱㈠紩銆?Oracle鑷姩缁存姢杩欎簺鏈湴绱㈠紩銆?鏈湴绱㈠紩鍒嗗尯杩樺彲浠ヨ鍗曠嫭閲嶅缓锛岃€屽叾浠栧垎鍖轰笉浼氬彈鍒板奖鍝嶃€?

2.7.1.1聽 鏈夊墠缂€鐨勭储寮?
鏈夊墠缂€鐨勭储寮曞寘鍚簡鏉ヨ嚜鍒嗗尯閿殑閿紝骞舵妸瀹冧滑浣滀负绱㈠紩鐨勫墠瀵笺€備緥濡傦紝璁╂垜浠啀娆″洖椤緋articipant 琛ㄣ€傚湪鍒涘缓璇ヨ〃鍚庯紝浣跨敤 survey_id 鍜?survey_date 杩欎袱涓垪杩涜鑼冨洿鍒嗗尯锛岀劧鍚庡湪 survey_id 鍒椾笂寤虹珛涓€涓湁鍓嶇紑鐨勬湰鍦扮储寮曪紝濡?涓嬪浘 鎵€绀恒€傝繖涓储寮曠殑鎵€鏈夊垎鍖洪兘琚瓑浠峰垝鍒嗭紝灏辨槸璇寸储寮曠殑鍒嗗尯閮戒娇鐢ㄨ〃鐨勭浉鍚岃寖鍥寸晫闄愭潵鍒涘缓銆?
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

鎶€宸э細 鏈湴鐨勬湁鍓嶇紑绱㈠紩鍙互璁㎡racle 蹇€熷墧闄や竴浜涗笉蹇呰鐨勫垎鍖恒€備篃灏辨槸璇存病鏈夊寘鍚?WHERE 鏉′欢瀛愬彞涓换浣曞€肩殑鍒嗗尯灏嗕笉浼氳璁块棶锛岃繖鏍蜂篃鎻愰珮浜嗚鍙ョ殑鎬ц兘銆?

2.7.1.2聽 鏃犲墠缂€鐨勭储寮?
鏃犲墠缂€鐨勭储寮曞苟娌℃湁鎶婂垎鍖洪敭鐨勫墠瀵煎垪浣滀负绱㈠紩鐨勫墠瀵煎垪銆傝嫢浣跨敤鏈夊悓鏍峰垎鍖洪敭(survey_id 鍜?survey_date) 鐨勭浉鍚屽垎鍖鸿〃锛屽缓绔嬪湪 survey_date 鍒椾笂鐨勭储寮曞氨鏄竴涓湰鍦扮殑鏃犲墠缂€绱㈠紩锛屽 涓嬪浘 鎵€绀恒€傚彲浠ュ湪琛ㄧ殑浠讳竴鍒椾笂鍒涘缓鏈湴鏃犲墠缂€绱㈠紩锛屼絾绱㈠紩鐨勬瘡涓垎鍖哄彧鍖呭惈琛ㄧ殑鐩稿簲鍒嗗尯鐨勯敭鍊笺€?
聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽


濡傛灉瑕佹妸鏃犲墠缂€鐨勭储寮曡涓哄敮涓€绱㈠紩锛岃繖涓储寮曞氨蹇呴』鍖呭惈鍒嗗尯閿殑瀛愰泦銆傚湪杩欎釜渚嬪瓙涓紝鎴戜滑蹇呴』鎶婂寘鍚玸urvey 鍜?( 鎴?)survey_id 鐨勫垪杩涜缁勫悎 ( 鍙 survey_id 涓嶆槸绱㈠紩鐨勭涓€鍒楋紝瀹冨氨鏄竴涓湁鍓嶇紑鐨勭储寮?) 銆?

鎶€宸э細 瀵逛簬涓€涓敮涓€鐨勬棤鍓嶇紑绱㈠紩锛屽畠蹇呴』鍖呭惈鍒嗗尯閿殑瀛愰泦銆?

2.7. 2. 聽 鍏ㄥ眬鍒嗗尯绱㈠紩
鍏ㄥ眬鍒嗗尯绱㈠紩鍦ㄤ竴涓储寮曞垎鍖轰腑鍖呭惈鏉ヨ嚜澶氫釜琛ㄥ垎鍖虹殑閿€備竴涓叏灞€鍒嗗尯绱㈠紩鐨勫垎鍖洪敭鏄垎鍖鸿〃涓笉鍚岀殑鎴栨寚瀹氫竴涓寖鍥寸殑鍊笺€傚湪鍒涘缓鍏ㄥ眬鍒嗗尯绱㈠紩鏃讹紝蹇呴』瀹氫箟鍒嗗尯閿殑鑼冨洿鍜屽€笺€?鍏ㄥ眬绱㈠紩鍙兘鏄疊 鏍戠储寮?銆?Oracle鍦ㄩ粯璁ゆ儏鍐典笅涓嶄細缁存姢鍏ㄥ眬鍒嗗尯绱㈠紩銆傚鏋滀竴涓垎鍖鸿鎴彇銆佸鍔犮€佸垎鍓层€佸垹闄ょ瓑锛屽氨蹇呴』閲嶅缓鍏ㄥ眬鍒嗗尯绱㈠紩 锛岄櫎闈炲湪淇敼琛ㄦ椂鎸囧畾ALTER聽TABLE 鍛戒护鐨?UPDATE聽GLOBAL聽INDEXES 瀛愬彞銆?

2.7.2.1聽 鏈夊墠缂€鐨勭储寮?
閫氬父锛屽叏灞€鏈夊墠缂€绱㈠紩鍦ㄥ簳灞傝〃涓病鏈夌粡杩囧绛夊垎鍖恒€傛病鏈変粈涔堝洜绱犺兘闄愬埗绱㈠紩鐨勫绛夊垎鍖猴紝浣哋racle 鍦ㄧ敓鎴愭煡璇㈣鍒掓垨鎵ц鍒嗗尯缁存姢鎿嶄綔鏃讹紝骞朵笉浼氬厖鍒嗗埄鐢ㄥ绛夊垎鍖恒€傚鏋滅储寮曡瀵圭瓑鍒嗗尯锛屽氨蹇呴』鎶婂畠鍒涘缓涓轰竴涓湰鍦扮储寮曪紝杩欐牱 Oracle 鍙互缁存姢杩欎釜绱㈠紩锛屽苟浣跨敤瀹冩潵鍒犻櫎涓嶅繀瑕佺殑鍒嗗尯锛屽 涓嬪浘 鎵€绀恒€傚湪璇ュ浘鐨? 涓储寮曞垎鍖轰腑锛屾瘡涓垎鍖洪兘鍖呭惈鎸囧悜澶氫釜琛ㄥ垎鍖轰腑琛岀殑绱㈠紩鏉$洰銆?
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽


聽聽聽聽聽聽聽 聽聽鍒嗗尯鐨勩€佸叏灞€鏈夊墠缂€绱㈠紩

鎶€宸?锛?濡傛灉涓€涓叏灞€绱㈠紩灏嗚瀵圭瓑鍒嗗尯锛屽氨蹇呴』鎶婂畠鍒涘缓涓轰竴涓湰鍦扮储寮曪紝杩欐牱Oracle 鍙互缁存姢杩欎釜绱㈠紩锛屽苟浣跨敤瀹冩潵鍒犻櫎涓嶅繀瑕佺殑鍒嗗尯銆?

2.7.2.2聽 鏃犲墠缂€鐨勭储寮?
Oracle涓嶆敮鎸佹棤鍓嶇紑鐨勫叏灞€绱㈠紩銆?

2.8聽聽浣嶅浘杩炴帴绱㈠紩
浣嶅浘杩炴帴绱㈠紩鏄熀浜庝袱涓〃鐨勮繛鎺ョ殑浣嶅浘绱㈠紩锛屽湪鏁版嵁浠撳簱鐜涓娇鐢ㄨ繖绉嶇储寮曟敼杩涜繛鎺ョ淮搴﹁〃鍜屼簨瀹炶〃鐨勬煡璇㈢殑鎬ц兘銆傚垱寤轰綅鍥捐繛鎺ョ储寮曟椂锛屾爣鍑嗘柟娉曟槸杩炴帴绱㈠紩涓父鐢ㄧ殑缁村害琛ㄥ拰浜嬪疄琛ㄣ€傚綋鐢ㄦ埛鍦ㄤ竴娆℃煡璇腑缁撳悎鏌ヨ浜嬪疄琛ㄥ拰缁村害琛ㄦ椂锛屽氨涓嶉渶瑕佹墽琛岃繛鎺ワ紝鍥犱负鍦ㄤ綅鍥捐繛鎺ョ储寮曚腑宸茬粡鏈夊彲鐢ㄧ殑杩炴帴缁撴灉銆傞€氳繃鍘嬬缉浣嶅浘杩炴帴绱㈠紩涓殑ROWID 杩涗竴姝ユ敼杩涙€ц兘锛屽苟涓斿噺灏戣闂暟鎹墍闇€鐨?I/O 鏁伴噺銆?

鍒涘缓浣嶅浘杩炴帴绱㈠紩鏃讹紝鎸囧畾娑夊強鐨勪袱涓〃銆傜浉搴旂殑璇硶搴旇閬靛惊濡備笅妯″紡锛?
create聽bitmap聽index聽FACT_DIM_COL_IDX 聽 on聽FACT(DIM.Descr_Col) 聽 from聽FACT,聽DIM
where聽FACT.JoinCol聽=聽DIM.JoinCol;

浣嶅浘杩炴帴鐨勮娉曟瘮杈冪壒鍒紝鍏朵腑鍖呭惈FROM 瀛愬彞鍜?WHERE 瀛愬彞锛屽苟涓斿紩鐢ㄤ袱涓崟鐙殑琛ㄣ€傜储寮曞垪閫氬父鏄淮搴﹁〃涓殑鎻忚堪鍒?鈥斺€?灏辨槸璇达紝濡傛灉缁村害鏄?CUSTOMER 锛屽苟涓斿畠鐨勪富閿槸 CUSTOMER_ID 锛屽垯閫氬父绱㈠紩 Customer_Name 杩欐牱鐨勫垪銆傚鏋滀簨瀹炶〃鍚嶄负 SALES 锛屽彲浠ヤ娇鐢ㄥ涓嬬殑鍛戒护鍒涘缓绱㈠紩锛?
create 聽 bitmap 聽 index 聽 SALES_CUST_NAME_IDX
on聽聽SALES(CUSTOMER.Customer_Name) 聽聽 from聽SALES,聽CUSTOMER
where聽聽SALES.Customer_ID=CUSTOMER.Customer_ID;

濡傛灉鐢ㄦ埛鎺ヤ笅鏉ヤ娇鐢ㄦ寚瀹欳ustomer_Name 鍒楀€肩殑 WHERE 瀛愬彞鏌ヨ SALES 鍜?CUSTOMER 琛紝浼樺寲鍣ㄥ氨鍙互浣跨敤浣嶅浘杩炴帴绱㈠紩蹇€熻繑鍥炲尮閰嶈繛鎺ユ潯浠跺拰 Customer_Name 鏉′欢鐨勮銆?

浣嶅浘杩炴帴绱㈠紩鐨勪娇鐢ㄤ竴鑸細鍙楀埌闄愬埗 锛?
1锛?鍙彲浠ョ储寮曠淮搴﹁〃涓殑鍒椼€?
2锛?鐢ㄤ簬杩炴帴鐨勫垪蹇呴』鏄淮搴﹁〃涓殑涓婚敭鎴栧敮涓€绾︽潫锛涘鏋滄槸澶嶅悎涓婚敭锛屽垯蹇呴』浣跨敤杩炴帴涓殑姣忎竴鍒椼€?
3锛?涓嶅彲浠ュ绱㈠紩缁勭粐琛ㄥ垱寤轰綅鍥捐繛鎺ョ储寮曪紝骞朵笖閫傜敤浜庡父瑙勪綅鍥剧储寮曠殑闄愬埗涔熼€傜敤浜庝綅鍥捐繛鎺ョ储寮曘€偮?


Oracle 绱㈠紩鐨勫垎绫?鍒嗘瀽涓庢瘮杈?

閫昏緫涓婏細
Single column 鍗曡绱㈠紩
Concatenated 澶氳绱㈠紩
Unique 鍞竴绱㈠紩
NonUnique 闈炲敮涓€绱㈠紩
Function-based鍑芥暟绱㈠紩
Domain 鍩熺储寮?

鐗╃悊涓婏細
Partitioned 鍒嗗尯绱㈠紩
NonPartitioned 闈炲垎鍖虹储寮?
B-tree锛?
Normal 姝e父鍨婤鏍?
Rever Key 鍙嶈浆鍨婤鏍?
Bitmap 浣嶅浘绱㈠紩

绱㈠紩缁撴瀯锛?
B-tree锛?
閫傚悎涓庡ぇ閲忕殑澧炪€佸垹銆佹敼锛圤LTP锛夛紱
涓嶈兘鐢ㄥ寘鍚玂R鎿嶄綔绗︾殑鏌ヨ锛?
閫傚悎楂樺熀鏁扮殑鍒楋紙鍞竴鍊煎锛?
鍏稿瀷鐨勬爲鐘剁粨鏋勶紱
姣忎釜缁撶偣閮芥槸鏁版嵁鍧楋紱
澶у閮芥槸鐗╃悊涓婁竴灞傘€佷袱灞傛垨涓夊眰涓嶅畾锛岄€昏緫涓婁笁灞傦紱
鍙跺瓙鍧楁暟鎹槸鎺掑簭鐨勶紝浠庡乏鍚戝彸閫掑锛?
鍦ㄥ垎鏀潡鍜屾牴鍧椾腑鏀剧殑鏄储寮曠殑鑼冨洿锛?
Bitmap:
閫傚悎涓庡喅绛栨敮鎸佺郴缁燂紱
鍋歎PDATE浠d环闈炲父楂橈紱
闈炲父閫傚悎OR鎿嶄綔绗︾殑鏌ヨ锛?
鍩烘暟姣旇緝灏戠殑鏃跺€欐墠鑳藉缓浣嶅浘绱㈠紩锛?

鏍戝瀷缁撴瀯锛?
绱㈠紩澶?
寮€濮婻OWID锛岀粨鏉烺OWID锛堝厛鍒楀嚭绱㈠紩鐨勬渶澶ц寖鍥达級
BITMAP
姣忎竴涓狟IT瀵瑰簲鐫€涓€涓猂OWID锛屽畠鐨勫€兼槸1杩樻槸0锛屽鏋滄槸1锛岃〃绀虹潃BIT瀵瑰簲鐨凴OWID鏈夊€硷紱[@more@]

Oracle绱㈠紩鍒嗘瀽涓庢瘮杈?
棣栧厛缁欏嚭鍚勭绱㈠紩鐨勭畝瑕佽В閲婏細
b*tree index锛氬嚑涔庢墍鏈夌殑鍏崇郴鍨嬫暟鎹簱涓兘鏈塨*tree绫诲瀷绱㈠紩锛屼篃鏄鏈€澶氫娇鐢ㄧ殑銆傚叾鏍戠粨鏋勪笌浜屽弶鏍戞瘮杈冪被浼硷紝鏍规嵁rid蹇€熷畾浣嶆墍璁块棶鐨勮銆?

鍙嶅悜绱㈠紩锛氬弽杞簡b*tree绱㈠紩鐮佷腑鐨勫瓧鑺傦紝鏄储寮曟潯鐩垎閰嶆洿鍧囧寑锛屽鐢ㄤ簬骞惰鏈嶅姟鍣ㄧ幆澧冧笅锛岀敤浜庡噺灏戠储寮曞彾鐨勭珵浜夈€?

闄嶅簭绱㈠紩锛?i涓柊鍑虹幇鐨勭储寮曠被鍨嬶紝閽堝閫嗗悜鎺掑簭鐨勬煡璇€?

浣嶅浘绱㈠紩锛氫娇鐢ㄤ綅鍥炬潵绠$悊涓庢暟鎹鐨勫搴斿叧绯伙紝澶氱敤浜嶰LAP绯荤粺銆?

鍑芥暟绱㈠紩锛氳繖绉嶇储寮曚腑淇濆瓨浜嗘暟鎹垪鍩轰簬function杩斿洖鐨勫€硷紝鍦╯elect * from table where function(column)=value杩欑绫诲瀷鐨勮鍙ヤ腑璧蜂綔鐢ㄣ€?

2 鍚勭绱㈠紩鐨勭粨鏋勫垎鏋?

2.1 B*Tree绱㈠紩B*Tree绱㈠紩鏄渶甯歌鐨勭储寮曠粨鏋勶紝榛樿寤虹珛鐨勭储寮曞氨鏄繖绉嶇被鍨嬬殑绱㈠紩銆侭*Tree绱㈠紩鍦ㄦ绱㈤珮鍩烘暟鏁版嵁鍒楋紙楂樺熀鏁版暟鎹垪鏄寚璇ュ垪鏈夊緢澶氫笉鍚岀殑鍊硷級鏃舵彁渚涗簡鏈€濂界殑鎬ц兘銆傚綋鍙栧嚭鐨勮鏁板崰鎬昏鏁版瘮渚嬭緝灏忔椂B-Tree绱㈠紩姣斿叏琛ㄦ绱㈡彁渚涗簡鏇存湁鏁堢殑鏂规硶銆備絾褰撴鏌ョ殑鑼冨洿瓒呰繃琛ㄧ殑10%鏃跺氨涓嶈兘鎻愰珮鍙栧洖鏁版嵁鐨勬€ц兘銆侭-Tree绱㈠紩鏄熀浜庝簩鍙夋爲鐨勶紝鐢卞垎鏀潡锛坆ranch block锛夊拰鍙跺潡锛坙eaf block锛夌粍鎴愩€傚湪鏍戠粨鏋勪腑锛屼綅浜庢渶搴曞眰搴曞潡琚О涓哄彾鍧楋紝鍖呭惈姣忎釜琚储寮曞垪鐨勫€煎拰琛屾墍瀵瑰簲鐨剅owid銆傚湪鍙惰妭鐐圭殑涓婇潰鏄垎鏀潡锛岀敤鏉ュ鑸粨鏋勶紝鍖呭惈浜嗙储寮曞垪锛堝叧閿瓧锛夎寖鍥村拰鍙︿竴绱㈠紩鍧楃殑鍦板潃銆?

鍋囪鎴戜滑瑕佹壘绱㈠紩涓€间负80鐨勮锛屼粠绱㈠紩鏍戠殑鏈€涓婂眰鍏ュ彛寮€濮嬶紝瀹氫綅鍒板ぇ浜庣瓑浜?0锛岀劧鍚庡線宸︽壘锛屾壘鍒扮2涓垎鏀潡锛屽畾浣嶄负75锛?00锛屾渶鍚庡啀瀹氫綅鍒板彾鍧椾笂锛屾壘鍒?0鎵€瀵瑰簲鐨剅owid锛岀劧鍚庢牴鎹畆owid鍘昏鍙栨暟鎹潡鑾峰彇鏁版嵁銆傚鏋滄煡璇㈡潯浠舵槸鑼冨洿閫夋嫨鐨勶紝姣斿where column >20 and column <80锛岄偅涔堜細鍏堝畾浣嶅埌绗竴涓寘鍚?0鐨勫彾鍧楋紝鐒跺悗妯悜鏌ユ壘鍏朵粬鐨勫彾鍧楋紝鐩村埌鎵惧埌鍖呭惈80鐨勫潡涓烘锛屼笉鐢ㄦ瘡娆¢兘浠庡叆鍙h繘鍘诲啀閲嶆柊瀹氫綅銆?

2.2 鍙嶅悜绱㈠紩
鍙嶅悜绱㈠紩鏄疊*Tree绱㈠紩鐨勪竴涓垎鏀紝瀹冪殑璁捐鏄负浜嗚繍鐢ㄥ湪鏌愪簺鐗瑰畾鐨勭幆澧冧笅鐨勩€侽racle鎺ㄥ嚭瀹冪殑涓昏鐩殑灏辨槸涓轰簡闄嶄綆鍦ㄥ苟琛屾湇鍔″櫒锛圤racle Parallel Server锛夌幆澧冧笅绱㈠紩鍙跺潡鐨勪簤鐢ㄣ€傚綋B*Tree绱㈠紩涓湁涓€鍒楁槸鐢遍€掑鐨勫簭鍒楀彿浜х敓鐨勮瘽锛岄偅涔堣繖浜涚储寮曚俊鎭熀鏈笂鍒嗗竷鍦ㄥ悓涓€涓彾鍧楋紝褰撶敤鎴蜂慨鏀规垨璁块棶鐩镐技鐨勫垪鏃讹紝绱㈠紩鍧楀緢瀹规槗浜х敓浜夌敤銆傚弽鍚戠储寮曚腑鐨勭储寮曠爜灏嗕細琚垎甯冨埌鍚勪釜绱㈠紩鍧椾腑锛屽噺灏戜簡浜夌敤銆傚弽鍚戠储寮曞弽杞簡绱㈠紩鐮佷腑姣忓垪鐨勫瓧鑺傦紝閫氳繃dump锛堬級鍑芥暟鎴戜滑鍙互娓呮寰楃湅瑙佸畠鍋氫簡浠€涔堛€備妇涓緥瀛愶細1锛?锛?涓変釜杩炵画鐨勬暟锛岀敤dump()鍑芥暟鐪嬪畠浠湪Oracle鍐呴儴鐨勮〃绀烘柟娉曘€?
    SQL> select 'number',dump(1,16) from dual
    2 union all select 'number',dump(2,16) from dual
    3 union all select 'number',dump(3,16) from dual;

    'NUMBE DUMP(1,16)
    ------ -----------------
    number Typ=2 Len=2: c1,2 锛?锛?
    number Typ=2 Len=2: c1,3 锛?锛?
    number Typ=2 Len=2: c1,4 锛?锛?
    鍐嶅姣斾竴涓嬪弽鍚戜互鍚庣殑鎯呭喌锛?
    SQL> select 'number',dump(reverse(1),16) from dual
    2 union all select 'number',dump(reverse(2),16) from dual
    3 union all select 'number',dump(reverse(3),16) from dual;

    'NUMBE DUMP(REVERSE(1),1
    ------ -----------------
    number Typ=2 Len=2: 2,c1 锛?锛?
    number Typ=2 Len=2: 3,c1 锛?锛?
    number Typ=2 Len=2: 4,c1 锛?锛?

鎴戜滑鍙戠幇绱㈠紩鐮佺殑缁撴瀯鏁翠釜棰犲€掕繃鏉ヤ簡锛岃繖鏍?锛?锛?涓储寮曠爜鍩烘湰涓婁笉浼氬嚭鐜板湪鍚屼竴涓彾鍧楅噷锛屾墍浠ュ噺灏戜簡浜夌敤銆備笉杩囧弽鍚戠储寮曞張涓€涓己鐐瑰氨鏄笉鑳藉湪鎵€鏈変娇鐢ㄥ父瑙勭储寮曠殑鍦版柟浣跨敤銆傚湪鑼冨洿鎼滅储涓叾涓嶈兘琚娇鐢紝渚嬪锛寃here column>value,鍥犱负鍦ㄧ储寮曠殑鍙跺潡涓储寮曠爜娌℃湁鍒嗙被锛屾墍浠ヤ笉鑳介€氳繃鎼滅储鐩搁偦鍙跺潡瀹屾垚鍖哄煙鎵弿銆?

2.3 闄嶅簭绱㈠紩
闄嶅簭绱㈠紩鏄?i閲岄潰鏂板嚭鐜扮殑涓€绉嶇储寮曪紝鏄疊*Tree鐨勫彟涓€涓鐢熺墿,瀹冪殑鍙樺寲灏辨槸鍒楀湪绱㈠紩涓殑鍌ㄥ瓨鏂瑰紡浠庡崌搴忓彉鎴愪簡闄嶅簭锛屽湪鏌愪簺鍦哄悎涓嬮檷搴忕储寮曞皢浼氳捣浣滅敤銆備妇涓緥瀛愶紝鎴戜滑鏉ユ煡璇竴寮犺〃骞惰繘琛屾帓搴忥細
SQL> select * from test where a between 1 and 100 order by a desc锛宐 asc;
    宸查€夋嫨100琛屻€?
    Execution Plan
    ----------------------------------------------------------
    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=100 Bytes=400)
    1 0 SORT(ORDER BY)(Cost=2 Card=100 Bytes=400)
    2 1 INDEX (RANGE SCAN) OF 'IND_BT' (NON-UNIQUE) (Cost=2 Card=100 Bytes=400)

杩欓噷浼樺寲鍣ㄩ鍏堥€夋嫨浜嗕竴涓储寮曡寖鍥存壂鎻?鐒跺悗杩樻湁涓€涓帓搴忕殑姝ラ銆傚鏋滀娇鐢ㄤ簡闄嶅簭绱㈠紩锛屾帓搴忕殑杩囩▼浼氳鍙栨秷銆?
   SQL> create index test.ind_desc on test.testrev(a desc锛宐 asc);
    绱㈠紩宸插垱寤恒€?
    SQL> analyze index test.ind_desc compute statistics;
    绱㈠紩宸插垎鏋?

鍐嶆潵鐪嬩笅鎵ц璺緞锛?
    SQL> select * from test where a between 1 and 100 order by a desc锛宐 asc;
    宸查€夋嫨100琛屻€?
    Execution Plan锛圫QL鎵ц璁″垝锛岀◢鍚庝細璁茶В濡備綍浣跨敤锛夈€?
    ----------------------------------------------------------
    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=100 Bytes=400)
    1 0 INDEX (RANGE SCAN) OF 'IND_DESC' (NON-UNIQUE) (Cost=2 Card=100 Bytes=400)

鎴戜滑鐪嬪埌鎺掑簭杩囩▼娑堝け浜嗭紝杩欐槸鍥犱负鍒涘缓闄嶅簭绱㈠紩鏃禣racle宸茬粡鎶婃暟鎹兘鎸夐檷搴忔帓濂戒簡銆傚彟澶栦竴涓渶瑕佹敞鎰忕殑鍦版柟鏄璁剧疆init.ora閲岄潰鐨刢ompatible鍙傛暟涓?.1.0鎴栦互涓婏紝鍚﹀垯鍒涘缓鏃禿esc鍏抽敭瀛楀皢琚拷鐣ャ€?

2.4 浣嶅浘绱㈠紩
浣嶅浘绱㈠紩涓昏鐢ㄤ簬鍐崇瓥鏀寔绯荤粺鎴栭潤鎬佹暟鎹紝涓嶆敮鎸佽绾ч攣瀹氥€備綅鍥剧储寮曟渶濂界敤浜庝綆cardinality鍒楋紙鍗冲垪鐨勫敮涓€鍊奸櫎浠ヨ鏁颁负涓€涓緢灏忕殑鍊硷紝鎺ヨ繎闆讹級锛屼緥濡傚張涓€涓€滄€у埆鈥濆垪锛屽垪鍊兼湁鈥淢ale鈥濓紝鈥淔emale鈥濓紝鈥淣ull鈥濈瓑3绉嶏紝浣嗕竴鍏辨湁300涓囨潯璁板綍锛岄偅涔?/3000000绾︾瓑浜?锛岃繖绉嶆儏鍐典笅鏈€閫傚悎鐢ㄤ綅鍥剧储寮曘€?
浣嶅浘绱㈠紩鍙互鏄畝鍗曠殑锛堝崟鍒楋級涔熷彲浠ユ槸杩炴帴鐨勶紙澶氬垪锛夛紝浣嗗湪瀹炶返涓粷澶у鏁版槸绠€鍗曠殑銆傚湪杩欎簺鍒椾笂澶氫綅鍥剧储寮曞彲浠ヤ笌AND鎴朞R鎿嶄綔绗︾粨鍚堜娇鐢ㄣ€備綅鍥剧储寮曚娇鐢ㄤ綅鍥句綔涓洪敭鍊硷紝瀵逛簬琛ㄤ腑鐨勬瘡涓€鏁版嵁琛屼綅鍥惧寘鍚簡TRUE锛?锛夈€丗ALSE锛?锛夈€佹垨NULL鍊笺€備綅鍥剧储寮曠殑浣嶅浘瀛樻斁鍦˙-Tree缁撴瀯鐨勯〉鑺傜偣涓€侭-Tree缁撴瀯浣挎煡鎵句綅鍥鹃潪甯告柟渚垮拰蹇€熴€傚彟澶栵紝浣嶅浘浠ヤ竴绉嶅帇缂╂牸寮忓瓨鏀撅紝鍥犳鍗犵敤鐨勭鐩樼┖闂存瘮B-Tree绱㈠紩瑕佸皬寰楀銆?
濡傛灉鎼滅储where gender=鈥橫ale鈥?瑕佺粺璁℃€у埆鏄€滿ale鈥濈殑鍒楄鏁扮殑璇濓紝Oracle寰堝揩灏辫兘浠庝綅鍥句腑鎵惧埌鍏?琛屽嵆绗?锛?锛?0琛屾槸绗﹀悎鏉′欢鐨勶紱濡傛灉瑕佹悳绱here gender=鈥橫ale鈥?or gender=鈥橣emale鈥欑殑鍒楃殑琛屾暟鐨勮瘽锛屼篃寰堝鏄撲粠浣嶅浘涓壘鍒板叡8琛屽嵆1锛?锛?锛?锛?锛?锛?锛?0琛屾槸绗﹀悎鏉′欢鐨勩€傚鏋滆鎼滅储琛ㄧ殑鍊肩殑璇濓紝閭d箞Oracle浼氱敤鍐呴儴鐨勮浆鎹㈠嚱鏁板皢浣嶅浘涓殑鐩稿叧淇℃伅杞崲鎴恟owid鏉ヨ闂暟鎹潡銆?

2.5 鍑芥暟绱㈠紩
鍩轰簬鍑芥暟鐨勭储寮曚篃鏄?i浠ユ潵鐨勬柊浜х墿锛屽畠鏈夌储寮曡绠楀垪鐨勮兘鍔涳紝瀹冩槗浜庝娇鐢ㄥ苟涓旀彁渚涜绠楀ソ鐨勫€硷紝鍦ㄤ笉淇敼搴旂敤绋嬪簭鐨勯€昏緫涓婃彁楂樹簡鏌ヨ鎬ц兘銆備娇鐢ㄥ熀浜庡嚱鏁扮殑绱㈠紩鏈夊嚑涓厛鍐虫潯浠讹細
锛?锛夊繀椤绘嫢鏈塓UERY REWRITE锛堟湰妯″紡涓嬶級鎴朑LOBAL QUERY REWRITE锛堝叾浠栨ā寮忎笅锛夋潈闄愩€?
锛?锛夊繀椤讳娇鐢ㄥ熀浜庢垚鏈殑浼樺寲鍣紝鍩轰簬瑙勫垯鐨勪紭鍖栧櫒灏嗚蹇界暐銆?
锛?锛夊繀椤昏缃互涓嬩袱涓郴缁熷弬鏁帮細
QUERY_REWRITE_ENABLED=TRUE
QUERY_REWRITE_INTEGRITY=TRUSTED
鍙互閫氳繃alter system set,alter session set鍦ㄧ郴缁熺骇鎴栫嚎绋嬬骇璁剧疆锛屼篃鍙互閫氳繃鍦╥nit.ora娣诲姞瀹炵幇銆傝繖閲屼妇涓€涓熀浜庡嚱鏁扮殑绱㈠紩鐨勪緥瀛愶細
   SQL> create index test.ind_fun on test.testindex(upper(a));
    绱㈠紩宸插垱寤恒€?
    SQL> insert into testindex values('a',2);
    宸插垱寤?1 琛屻€?
    SQL> commit;
    鎻愪氦瀹屾垚銆?
    SQL> select /*+ RULE*/* FROM test.testindex where upper(a)='A';
    A B
    -- ----------
    a 2
    Execution Plan
    ----------------------------------------------------------
    0 SELECT STATEMENT Optimizer=HINT: RULE
    1 0 TABLE ACCESS (FULL) OF 'TESTINDEX'
    (浼樺寲鍣ㄩ€夋嫨浜嗗叏琛ㄦ壂鎻?
    --------------------------------------------------------------------
    SQL> select * FROM test.testindex where upper(a)='A';
    A B
    -- ----------
    a 2
    Execution Plan
    ----------------------------------------------------------
    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=5)
    1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TESTINDEX' (Cost=2 Card=
    1 Bytes=5)
    2 1 INDEX (RANGE SCAN) OF 'IND_FUN' (NON-UNIQUE) (Cost=1 Car
    d=1)(浣跨敤浜唅nd_fun绱㈠紩)

3 鍚勭绱㈠紩鐨勫垱寤烘柟娉?
锛?锛?Tree绱㈠紩銆?
Create index indexname on tablename(columnname[columnname...])
锛?锛夊弽鍚戠储寮曘€?
Create index indexname on tablename(columnname[columnname...]) reverse
锛?锛夐檷搴忕储寮曘€?
Create index indexname on tablename(columnname DESC[columnname...])
锛?锛変綅鍥剧储寮曘€?
Create BITMAP index indexname on tablename(columnname[columnname...])
锛?锛夊嚱鏁扮储寮曘€?
Create index indexname on tablename(functionname(columnname))
娉ㄦ剰锛氬垱寤虹储寮曞悗鍒嗘瀽瑕佺储寮曟墠鑳借捣浣滅敤銆?
analyze index indexname compute statistics;
4 鍚勭绱㈠紩浣跨敤鍦哄悎鍙婂缓璁紙1锛塀*Tree绱㈠紩銆?
甯歌绱㈠紩锛屽鐢ㄤ簬oltp绯荤粺锛屽揩閫熷畾浣嶈锛屽簲寤虹珛浜庨珮cardinality鍒楋紙鍗冲垪鐨勫敮涓€鍊奸櫎浠ヨ鏁颁负涓€涓緢澶х殑鍊硷紝瀛樺湪寰堝皯鐨勭浉鍚屽€硷級銆?

锛?锛夊弽鍚戠储寮曘€?
B*Tree鐨勮鐢熶骇鐗╋紝搴旂敤浜庣壒娈婂満鍚堬紝鍦╫ps鐜鍔犲簭鍒楀鍔犵殑鍒椾笂寤虹珛锛屼笉閫傚悎鍋氬尯鍩熸壂鎻忋€?

锛?锛夐檷搴忕储寮曘€?
B*Tree鐨勮鐢熶骇鐗╋紝搴旂敤浜庢湁闄嶅簭鎺掑垪鐨勬悳绱㈣鍙ヤ腑锛岀储寮曚腑鍌ㄥ瓨浜嗛檷搴忔帓鍒楃殑绱㈠紩鐮侊紝鎻愪緵浜嗗揩閫熺殑闄嶅簭鎼滅储銆?

锛?锛変綅鍥剧储寮曘€?
浣嶅浘鏂瑰紡绠$悊鐨勭储寮曪紝閫傜敤浜嶰LAP锛堝湪绾垮垎鏋愶級鍜孌SS锛堝喅绛栧鐞嗭級绯荤粺锛屽簲寤虹珛浜庝綆cardinality鍒楋紝閫傚悎闆嗕腑璇诲彇锛屼笉閫傚悎鎻掑叆鍜屼慨鏀癸紝鎻愪緵姣擝*Tree绱㈠紩鏇磋妭鐪佺殑绌洪棿銆?

锛?锛夊嚱鏁扮储寮曘€?
B*Tree鐨勮鐢熶骇鐗╋紝搴旂敤浜庢煡璇㈣鍙ユ潯浠跺垪涓婂寘鍚嚱鏁扮殑鎯呭喌锛岀储寮曚腑鍌ㄥ瓨浜嗙粡杩囧嚱鏁拌绠楃殑绱㈠紩鐮佸€笺€傚彲浠ュ湪涓嶄慨鏀瑰簲鐢ㄧ▼搴忕殑鍩虹涓婅兘鎻愰珮鏌ヨ鏁堢巼銆?

5 闄勮〃锛堢储寮曚粈涔堟椂鍊欎笉宸ヤ綔锛?
棣栧厛瑕佸0鏄庝袱涓煡璇嗙偣锛?
锛?锛塕BO&CBO銆?
Oracle鏈変袱绉嶆墽琛屼紭鍖栧櫒锛屼竴绉嶆槸RBO(Rule Based Optimizer)鍩轰簬瑙勫垯鐨勪紭鍖栧櫒锛岃繖绉嶄紭鍖栧櫒鏄熀浜巗ql璇彞鍐欐硶閫夋嫨鎵ц璺緞鐨勶紱鍙︿竴绉嶆槸CBO锛圕ost Based Optimizer锛夊熀浜庤鍒欑殑浼樺寲鍣紝杩欑浼樺寲鍣ㄦ槸Oracle鏍规嵁缁熻鍒嗘瀽淇℃伅鏉ラ€夋嫨鎵ц璺緞锛屽鏋滆〃鍜岀储寮曟病鏈夎繘琛屽垎鏋愶紝Oracle灏嗕細浣跨敤RBO浠f浛CBO锛涘鏋滆〃鍜岀储寮曞緢涔呮湭鍒嗘瀽锛孋BO涔熸湁鍙兘閫夋嫨閿欒鎵ц璺緞锛屼笉杩嘋BO鏄疧racle鍙戝睍鐨勬柟鍚戯紝鑷?i鐗堟湰鏉ュ凡缁忛€愭笎鍙栦唬RBO.
锛?锛堿UTOTRACE銆?
瑕佺湅绱㈠紩鏄惁琚娇鐢ㄦ垜浠鍊熷姪Oracle鐨勪竴涓彨鍋欰UTOTRACE鍔熻兘,瀹冩樉绀轰簡sql璇彞鐨勬墽琛岃矾寰勶紝鎴戜滑鑳界湅鍒癘racle鍐呴儴鏄€庝箞鎵цsql鐨勶紝杩欐槸涓€涓潪甯稿ソ鐨勮緟鍔╁伐鍏凤紝鍦╯ql璋冧紭閲屽箍娉涜杩愮敤銆傛垜浠潵鐪嬩竴涓嬫€庝箞杩愮敤AUTOTRACE锛?
鈶?鐢变簬AUTOTRACE鑷姩涓虹敤鎴锋寚瀹氫簡Execution Plan,鍥犳璇ョ敤鎴蜂娇鐢ˋUTOTRACE鍓嶅繀椤诲凡缁忓缓绔嬩簡PLAN_TABLE銆傚鏋滄病鏈夌殑璇濓紝璇疯繍琛寀tlxplan.sql鑴氭湰锛堝畠鍦?ORACLE_HOME/rdbms/admin鐩綍涓級銆?
鈶?AUTOTRACE鍙互閫氳繃杩愯plustrce.sql鑴氭湰(瀹冨湪$ORACLE_HOME/sqlplus/admin鐩綍涓?鏉ヨ缃紝鐢╯ys鐢ㄦ埛鐧婚檰鐒跺悗杩愯plustrce.sql鍚庝細寤虹珛涓€涓狿LUSTRACE瑙掕壊锛岀劧鍚庣粰鐩稿叧鐢ㄦ埛鎺堜簣PLUSTRACE瑙掕壊锛岀劧鍚庤繖浜涚敤鎴峰氨鍙互浣跨敤AUTOTRACE鍔熻兘浜嗐€?
鈶?AUTOTRACE鐨勯粯璁や娇鐢ㄦ柟娉曟槸set autotrace on锛屼絾鏄繖鏂规硶涓嶆€绘槸閫傚悎鍚勭鍦哄悎锛岀壒鍒綋杩斿洖琛屾暟寰堝鐨勬椂鍊欍€係et autotrace traceonly鎻愪緵浜嗗彧鏌ョ湅缁熻淇℃伅鑰屼笉鏌ヨ鏁版嵁鐨勫姛鑳姐€?
    SQL> set autotrace on
    SQL> select * from test;
    A
    ----------
    1
    Execution Plan
    ----------------------------------------------------------
    0 SELECT STATEMENT Optimizer=CHOOSE
    1 0 TABLE ACCESS (FULL) OF 'TEST'
    Statistics
    ----------------------------------------------------------
    0 recursive calls
    0 db block gets
    0 consistent gets
    0 physical reads
    0 redo size
    0 bytes sent via SQL*Net to client
    0 bytes received via SQL*Net from client
    0 SQL*Net roundtrips to/from client
    0 sorts (memory)
    0 sorts (disk)
    rows processed

    SQL> set autotrace traceonly
    SQL> select * from test.test;

    Execution Plan
    ----------------------------------------------------------
    0 SELECT STATEMENT Optimizer=CHOOSE
    1 0 TABLE ACCESS (FULL) OF 'TEST'

    Statistics
    ----------------------------------------------------------
    0 recursive calls
    0 db block gets
    0 consistent gets
    0 physical reads
    0 redo size
    0 bytes sent via SQL*Net to client
    0 bytes received via SQL*Net from client
    0 SQL*Net roundtrips to/from client
    0 sorts (memory)
    0 sorts (disk)
    rows processed

Hints鏄疧racle鎻愪緵鐨勪竴涓緟鍔╃敤娉曪紝鎸夊瓧闈㈢悊瑙e氨鏄€樻彁绀衡€欑殑鎰忔€濓紝纭疄瀹冭捣寰椾綔鐢ㄤ篃鏄彁绀轰紭鍖栧櫒鎸夊畠鎵€鎻愪緵鐨勫叧閿瓧鏉ラ€夋嫨鎵ц璺緞锛岀壒鍒€傜敤浜巗ql璋冩暣鐨勬椂鍊欍€備娇鐢ㄦ柟娉曞涓嬶細
{DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */
鍏蜂綋鍙弬鑰僌racle SQL Reference銆傛湁浜嗗墠闈㈣繖浜涚煡璇嗙偣锛屾帴涓嬫潵璁╂垜浠潵鐪嬩竴涓嬩粈涔堟椂鍊欑储寮曟槸涓嶈捣浣滅敤鐨勩€備互涓嬪垪鍑哄嚑绉嶆儏鍐点€?


绱㈠紩甯歌鎿嶄綔 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽鏀瑰彉绱㈠紩锛?
SQL> alter index employees_last _name_idx storage(next 400K maxextents 100);
绱㈠紩鍒涘缓鍚庯紝鎰熻涓嶅悎鐞嗭紝涔熷彲浠ュ鍏跺弬鏁拌繘琛屼慨鏀广€傝鎯呮煡鐪嬬浉鍏虫枃妗?



璋冩暣绱㈠紩鐨勭┖闂达細
鏂板鍔犵┖闂?
SQL> alter index orders_region_id_idx allocate extent (size 200K datafile '/disk6/index01.dbf');

閲婃斁绌洪棿
SQL> alter index oraers_id_idx deallocate unused;

绱㈠紩鍦ㄤ娇鐢ㄧ殑杩囩▼涓彲鑳戒細鍑虹幇绌洪棿涓嶈冻鎴栫┖闂存氮璐圭殑鎯呭喌锛岃繖涓椂鍊欓渶瑕佹柊澧炴垨閲婃斁绌洪棿銆備笂闈袱鏉″懡浠ゅ畬鎴愭柊澧炰笌閲婃斁鎿嶄綔銆傚叧浜庣┖闂寸殑鏂板oracle鍙互鑷姩甯姪锛屽鏋滀簡瑙f暟鎹簱鐨勬儏鍐典笅鎵嬪姩澧炲姞鍙互鎻愰珮鎬ц兘銆?



閲嶆柊鍒涘缓绱㈠紩锛?
鎵€寮曟槸鐢眔racle鑷姩瀹屾垚锛屽綋鎴戜滑瀵规暟鎹簱棰戠箒鐨勬搷浣滄椂锛岀储寮曚篃浼氳窡鐫€杩涜淇敼锛屽綋鎴戜滑鍦ㄦ暟鎹簱涓垹闄や竴鏉¤褰曟椂锛屽搴旂殑绱㈠紩涓苟娌℃湁鎶婄浉搴旂殑绱㈠紩鍙槸鍋氫竴涓垹闄ゆ爣璁帮紝浣嗗畠渚濈劧鍗犳嵁鐫€绌洪棿銆傞櫎闈炰竴涓潡涓墍鏈夌殑鏍囪鍏ㄨ鍒犻櫎鐨勬椂锛屾暣涓潡鐨勭┖闂存墠浼氳閲婃斁銆傝繖鏍锋椂闂翠箙浜嗭紝绱㈠紩鐨勬€ц兘灏变細涓嬮檷銆傝繖涓椂鍊欏彲浠ラ噸鏂板缓绔嬩竴涓共鍑€鐨勭储寮曟潵鎻愰珮鏁堢巼銆?
SQL> alter index orders_region_id_idx rebuild tablespace index02;

閫氳繃涓婇潰鐨勫懡浠ゅ氨鍙互閲嶇幇寤虹珛涓€涓储寮曪紝oracle閲嶅缓绔嬬储寮曠殑杩囩▼锛?
1銆侀攣琛紝閿佽〃涔嬪悗鍏朵粬浜哄氨涓嶈兘瀵硅〃鍋氫换浣曟搷浣溿€?
2銆佸垱寤烘柊鐨勶紙骞插噣鐨勶級涓存椂绱㈠紩銆?
3銆佹妸鑰佺殑绱㈠紩鍒犻櫎鎺?
4銆佹妸鏂扮殑绱㈠紩閲嶆柊鍛藉悕涓鸿€佺储寮曠殑鍚嶅瓧
5銆佸琛ㄨ繘琛岃В閿併€?

聽绉诲姩鎵€寮曪細
鍏跺疄锛屾垜浠Щ鍔ㄧ储寮曞埌鍏跺畠琛ㄧ┖闂翠篃鍚屾牱浣跨敤涓婇潰鐨勫懡浠わ紝鍦ㄦ寚瀹氳〃绌洪棿鏃舵寚瀹氫笉鍚岀殑琛ㄧ┖闂淬€傛柊鐨勭储寮曞垱寤哄湪鍒綅缃紝鎶婅€佺殑骞叉帀锛屽氨鐩稿綋浜庣Щ鍔ㄤ簡銆?

SQL> alter index orders_region_id_idx rebuild tablespace index03;


鍦ㄧ嚎閲嶆柊鍒涘缓绱㈠紩锛?
涓婇潰浠嬬粛锛屽湪鍒涘缓绱㈠紩鐨勬椂鍊欙紝琛ㄦ槸琚攣瀹氾紝涓嶈兘琚娇鐢ㄣ€傚浜庝竴涓ぇ琛紝閲嶆柊鍒涘缓绱㈠紩鎵€闇€瑕佺殑鏃堕棿杈冮暱锛屼负浜嗘弧瓒崇敤鎴峰琛ㄦ搷浣滅殑闇€姹傦紝灏变骇鐢熺殑杩欑鍦ㄧ嚎閲嶆柊鍒涘缓绱㈠紩銆?
SQL> alter index orders_id_idx  rebuild  online;

鍒涘缓杩囩▼锛?
1銆侀攣浣忚〃
2銆佸垱寤虹珛涓存椂鐨勫拰绌虹殑绱㈠紩鍜孖OT琛ㄧ敤鏉ュ瓨鍦╫n-going聽DML銆傛櫘閫氳〃瀛樻斁鐨勯敭鍊硷紝IOT鎵€寮曡〃鐩存帴瀛樻斁鐨勮〃涓暟鎹紱on-gong聽DML涔熷氨鏄敤鎴锋墍鍋氱殑涓€浜涘鍒犳敼鐨勬搷浣溿€?
3銆佸琛ㄨ繘琛岃В閿?
4銆佷粠鑰佺殑绱㈠紩鍒涘缓涓€涓柊鐨勭储寮曘€?
5銆両OT琛ㄩ噷瀛樻斁鐨勬槸on-going聽DML淇℃伅锛孖OT琛ㄧ殑鍐呭涓庢柊鍒涘缓鐨勭储寮曞悎骞躲€?
6銆侀攣浣忚〃
7銆佸啀娆″皢IOT琛ㄧ殑鍐呭鏇存柊鍒版柊绱㈠紩涓紝鎶婅€佺殑绱㈠紩骞叉帀銆?
8銆佹妸鏂扮殑绱㈠紩閲嶆柊鍛藉悕涓鸿€佺储寮曠殑鍚嶅瓧
9銆佸琛ㄨ繘琛岃В閿?

聽鏁村悎绱㈠紩纰庣墖锛?
濡備笂鍥撅紝鍦ㄥ緢澶氱储寮曚腑鏈夊墿浣欑殑绌洪棿锛屽彲浠ラ€氳繃涓€涓懡浠ゆ妸鍓╀綑绌洪棿鏁村悎鍒颁竴璧枫€傘€€銆€
SQL> alter index orders_id_idx  coalesce;

鍒犻櫎绱㈠紩锛?
SQL> drop  index  hr.departments_name_idx;

鍒嗘瀽绱㈠紩 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 妫€鏌ユ墍寮曠殑鏈夋晥鏋滐紝鍓嶉潰浠嬬粛锛岀储寮曠敤鐨勬椂闂翠箙浜嗕細浜х敓澶ч噺鐨勭鐗囥€佸瀮鍦句俊鎭笌娴垂鐨勫墿浣欑┖闂翠簡銆傚彲浠ラ€氳繃閲嶆柊鍒涘缓绱㈠紩鏉ユ彁楂樻墍寮曠殑鎬ц兘銆?
鍙互閫氳繃涓€鏉″懡浠ゆ潵瀹屾垚鍒嗘瀽绱㈠紩锛屽垎鏋愮殑缁撴灉浼氬瓨鏀惧湪鍦╥ndex_stats琛ㄤ腑銆?
鏌ョ湅瀛樻斁鍒嗘瀽鏁版嵁鐨勮〃锛?
SQL> select count(*) from index_stats;

  COUNT(*)
----------
         0
鎵ц鍒嗘瀽绱㈠紩鍛戒护锛?
SQL> analyze index my_bit_idx validate structure;

Index analyzed.

鍐嶆鏌ョ湅 index_stats 宸茬粡鏈変簡涓€鏉℃暟鎹?
SQL> select count(*) from index_stats;

  COUNT(*)
----------
         1

鎶婃暟鎹煡璇㈠嚭鏉ワ細
SQL> select height,name,lf_rows,lf_blks,del_lf_rows from index_stats;

    HEIGHT   NAME              LF_ROWS   LF_BLKS   DEL_LF_ROWS
---------- ---------------------------------------------------------------------- ---------- -----------
         2   MY_BIT_IDX            1000          3            100 

鍒嗘瀽鏁版嵁鍒嗘瀽锛?

锛圚EIGHT锛夎繖涓墍寮曢珮搴︽槸2聽锛岋紙NAME锛夌储寮曞悕涓篗Y_BIT_IDX聽聽锛岋紙LF_ROWS锛夋墍寮曡〃鏈?000琛屾暟鎹紝锛圠F_BLKS锛夊崰鐢?涓潡锛岋紙DEL_LF_ROWS锛夊垹闄?00鏉¤褰曘€?

銆€銆€杩欓噷涔熼獙璇佷簡鍓嶉潰鎵€璇寸殑涓€涓棶棰橈紝鍒犻櫎鐨?00鏉℃暟鎹彧鏄爣璁颁负鍒犻櫎锛屽洜涓烘€荤殑鏁版嵁鏉℃暟渚濈劧涓?000鏉★紝鍗犵敤3涓潡锛岄偅涔堟瘡涓潡澶т簬333鏉¤褰曪紝鍙湁鍒犻櫎鐨勬暟鎹ぇ浜?33鏉¤褰曪紝杩欐椂涓€涓潡琚竻绌猴紝鎬荤殑鏁版嵁鏉℃暟鎵嶄細鍑忓皯銆?



绱㈠紩
绱㈠紩鏄叧绯绘暟鎹簱涓敤浜庡瓨鏀炬瘡涓€鏉¤褰曠殑涓€绉嶅璞★紝涓昏鐩殑鏄姞蹇暟鎹殑璇诲彇閫熷害鍜屽畬鏁存€ф鏌ャ€傚缓绔嬬储寮曟槸涓€椤规妧鏈€ц姹傞珮鐨勫伐浣溿€備竴鑸湪鏁版嵁搴撹璁¢樁娈电殑涓庢暟鎹簱缁撴瀯涓€閬撹€冭檻銆傚簲鐢ㄧ郴缁熺殑鎬ц兘鐩存帴涓庣储寮曠殑鍚堢悊鐩存帴鏈夊叧銆備笅闈㈢粰鍑哄缓绔嬬储寮曠殑鏂规硶鍜岃鐐广€?
搂3.5.1 寤虹珛绱㈠紩
1. CREATE INDEX鍛戒护璇硶:
CREATE INDEX
CREATE [unique] INDEX [user.]index
ON [user.]table (column [ASC | DESC] [,column
[ASC | DESC] ] ... )
[CLUSTER [scheam.]cluster]
[INITRANS n]
[MAXTRANS n]
[PCTFREE n]
[STORAGE storage]
[TABLESPACE tablespace]
[NO SORT]
Advanced
鍏朵腑锛?
聽聽 schema ORACLE妯″紡锛岀己鐪佸嵆涓哄綋鍓嶅笎鎴?
聽聽 index 绱㈠紩鍚?
聽聽 table 鍒涘缓绱㈠紩鐨勫熀琛ㄥ悕
聽聽 column 鍩鸿〃涓殑鍒楀悕锛屼竴涓储寮曟渶澶氭湁16鍒楋紝long鍒椼€乴ong raw
聽聽聽聽聽聽聽聽聽聽聽聽聽 鍒椾笉鑳藉缓绱㈠紩鍒?
聽聽 DESC銆丄SC 缂虹渷涓篈SC鍗冲崌搴忔帓搴?
聽聽 CLUSTER 鎸囧畾涓€涓仛绨囷紙Hash cluster涓嶈兘寤虹储寮曪級
聽聽 INITRANS銆丮AXTRANS 鎸囧畾鍒濆鍜屾渶澶т簨鍔″叆鍙f暟
聽聽 Tablespace 琛ㄧ┖闂村悕
聽聽 STORAGE 瀛樺偍鍙傛暟锛屽悓create table 涓殑storage.
聽聽 PCTFREE 绱㈠紩鏁版嵁鍧楃┖闂茬┖闂寸殑鐧惧垎姣?涓嶈兘鎸囧畾pctused)
聽聽 NOSORT 涓嶏紙鑳斤級鎺掑簭锛堝瓨鍌ㄦ椂灏卞凡鎸夊崌搴忥紝鎵€浠ユ寚鍑轰笉鍐嶆帓搴忥級
2.寤虹珛绱㈠紩鐨勭洰鐨勶細
寤虹珛绱㈠紩鐨勭洰鐨勬槸锛?
l 鎻愰珮瀵硅〃鐨勬煡璇㈤€熷害锛?
l 瀵硅〃鏈夊叧鍒楃殑鍙栧€艰繘琛屾鏌ャ€?
浣嗘槸锛屽琛ㄨ繘琛宨nsert,update,delete澶勭悊鏃讹紝鐢变簬瑕佽〃鐨勫瓨鏀句綅缃褰曞埌绱㈠紩椤逛腑鑰屼細闄嶄綆涓€浜涢€熷害銆?
娉ㄦ剰锛氫竴涓熀琛ㄤ笉鑳藉缓澶鐨勭储寮曪紱
聽聽聽聽聽 绌哄€间笉鑳借绱㈠紩
聽聽聽聽聽 鍙湁鍞竴绱㈠紩鎵嶇湡姝f彁楂橀€熷害,涓€鑸殑绱㈠紩鍙兘鎻愰珮30%宸﹀彸銆?
聽聽 Create index ename_in on emp (ename,sal);
渚?锛氬晢鍦虹殑鍟嗗搧搴撹〃缁撴瀯濡備笅锛屾垜浠负璇ヨ〃鐨勫晢鍝佷唬鐮佸缓绔嬩竴鍞竴绱㈠紩锛屼娇寰楀湪鍓嶅彴POS鏀舵鏃舵彁楂樻煡璇㈤€熷害銆?
Create table good(good_id number(8) not null,/* 鍟嗗搧鏉$爜 */
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Good_desc varchar2(40), /* 鍟嗗搧鎻忚堪 */
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Unit_cost number(10,2) /* 鍗曚环 */
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Good_unit varchar2(6), /* 鍗曚綅 */
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Unit_pric number(10,2) /* 闆跺敭浠?*/
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 )锛?
娉細鎻愰珮鏌ヨ閫熷害鐨勬柟娉曡繕鏈夊湪琛ㄤ笂寤虹珛涓婚敭锛屼富閿笌鍞竴绱㈠紩鐨勫樊鍒?
鍦ㄤ簬鍞竴绱㈠紩鍙互绌猴紝涓婚敭涓洪潪绌猴紝姣斿锛?
Create table good(good_id number(8) primary key,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Good_desc Varchar2(40),
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Unit_cost number(10,2),
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Good_unit char(6),
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Unit_pric number(10,2)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 );
搂3.5.2 淇敼绱㈠紩
瀵逛簬杈冩棭鐨凮racle鐗堟湰锛屼慨鏀圭储寮曠殑涓昏浠诲姟鏄慨鏀瑰凡瀛樺湪绱㈠紩鐨勫瓨鍌ㄥ弬鏁伴€傚簲澧為暱鐨勯渶瑕佹垨鑰呴噸鏂板缓绔嬬储寮曘€傝€孫racle8I鍙婁互鍚庣殑鐗堟湰锛屽彲浠ュ鏃犵敤鐨勭┖闂磋繘琛屽悎骞躲€傝繖浜涚殑宸ヤ綔涓昏鏄敱绠$悊鍛樻潵瀹屾垚銆?
绠€瑕佽娉曠粨鏋勫涓?鏇磋缁嗙殑璇硶鍥捐鐢靛瓙鏂囨。銆奜racle8i Reference 銆?涓殑 Alter index.
ALTER [UNIQUE] INDEX [user.]index
[INITRANS n]
[MAXTRANS n]聽
REBUILD聽
[STORAGE n]
鍏朵腑锛?
REBUILD 鏄?鏍规嵁鍘熸潵鐨勭储寮曠粨鏋勯噸鏂板缓绔嬬储寮曪紝瀹為檯鏄垹闄ゅ師鏉ョ殑绱㈠紩鍚庡啀閲嶆柊寤虹珛銆?
鎻愮ず锛欴BA缁忓父鐢?REBUILD 鏉ラ噸寤虹储寮曞彲浠ュ噺灏戠‖鐩樼鐗囧拰鎻愰珮搴旂敤绯荤粺鐨勬€ц兘銆?
渚嬶細
alter index pk_detno rebuild storage(initial 1m next 512k);
ALTER INDEX emp_ix REBUILD REVERSE;
Oracle8i 鐨勬柊鍔熻兘鍙互瀵圭储寮曠殑鏃犵敤绌洪棿杩涜鍚堝苟锛屽畠鐢变笅闈㈠懡浠ゅ畬鎴愶細
ALTER INDEX . . . COALESCE;
渚嬪锛?
ALTER INDEX ename_idx COALESCE;
搂3.5.3 鍒犻櫎绱㈠紩
褰撲笉闇€瑕佹椂鍙互灏嗙储寮曞垹闄や互閲婃斁鍑虹‖鐩樼┖闂淬€傚懡浠ゅ涓嬶細
DROP INDEX [schema.]indexname
渚嬪锛?
sql> drop index pk_dept;
娉細褰撹〃缁撴瀯琚垹闄ゆ椂锛屾湁鍏剁浉鍏崇殑鎵€鏈夌储寮曚篃闅忎箣琚垹闄ゃ€?
搂3.6 鏂扮储寮曠被鍨?
Oracle8i涓轰簡鎬ц兘浼樺寲鑰屾彁渚涙柊鐨勫垱寤烘柊绫诲瀷鐨勭储寮曘€傝繖浜涙柊绱㈠紩鍦ㄤ笅闈粙缁嶏細
搂3.6.1 鍩轰簬鍑芥暟鐨勭储寮?
鍩轰簬鍑芥暟鐨勭储寮曞氨鏄瓨鍌ㄩ鍏堣绠楀ソ鐨勫嚱鏁版垨琛ㄨ揪寮忓€肩殑绱㈠紩銆傝繖浜涜〃杈惧紡鍙互鏄畻鏈繍绠楄〃杈惧紡銆丼QL鎴朠L/SQL鍑芥暟銆丆璋冪敤绛夈€傚€煎緱娉ㄦ剰鐨勬槸锛屼竴鑸敤鎴疯鍒涘缓鍑芥暟绱㈠紩锛屽繀椤诲叿鏈塆LOBAL QUERY REWRITE鍜孋REATE ANY INDEX鏉冮檺銆傚惁鍒欎笉鑳藉垱寤哄嚱鏁扮储寮曪紝鐪嬩笅闈緥瀛愶細
渚?锛氫负EMP琛ㄧ殑ename 鍒楀缓绔嬪ぇ鍐欒浆鎹㈠嚱鏁扮殑绱㈠紩idx 锛?
CREATE INDEX idx ON emp ( UPPER(ename));
杩欐牱灏卞彲浠ュ湪鏌ヨ璇彞鏉ヤ娇鐢細
SELECT * FROM EMP WHERE UPPER(ename) LIKE 鈥楯OH%鈥?
渚?锛氫负emp 鐨勫伐璧勫拰濂栭噾涔嬪拰寤虹珛绱㈠紩锛?
1) 鏌ョ湅emp 鐨勮〃缁撴瀯锛?
SQL> desc emp
聽Name Null? Type
聽----------------------------------------- -------- ------------------
聽EMPNO NOT NULL NUMBER(4)
聽ENAME VARCHAR2(10)
聽JOB VARCHAR2(9)
聽MGR NUMBER(4)
聽HIREDATE DATE
聽SAL NUMBER(7,2)
聽COMM NUMBER(7,2)
聽DEPTNO NUMBER(2)
2)娌℃湁鎺堟潈灏卞垱寤哄嚱鏁扮储寮曠殑鎻愮ず锛?
SQL> create index sal_comm on emp ( (sal+comm)*12, sal,comm)
聽2 tablespace users storage(initial 64k next 64k pctincrease 0);
create index sal_comm on emp ( (sal+comm)*12, sal,comm)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
ERROR at line 1:
ORA-01031: insufficient privileges
3) 杩炴帴鍒癉BA甯愭埛骞舵巿鏉冿細
SQL> connect sys/sys@ora816
Connected.
SQL> grant GLOBAL QUERY REWRITE to scott;
Grant succeeded.
SQL> grant CREATE ANY INDEX to scott;
Grant succeeded.
4锛夊湪杩炴帴鍒皊cott甯愭埛锛屽垱寤哄熀浜庡嚱鏁扮殑绱㈠紩锛?
SQL> connect scott/tiger@ora816
Connected.
SQL> create index sal_comm on emp ( (sal+comm)*12, sal,comm)
聽2 tablespace users storage(initial 64k next 64k pctincrease 0);
Index created.
1)鍦ㄦ煡璇腑浣跨敤鍑芥暟绱㈠紩锛?
SQL> select ename,sal,comm from emp where (sal+comm)*12 >5000;
ENAME SAL COMM
---------------------- ---------------- ----------------
ALLEN 1600 300
WARD 1250 500
MARTIN 1250 1400
TURNER 1500 0
聽聽聽 璧靛厓鏉?1234.5 54321
搂3.6.2 鍙嶅悜閿储寮?
鍙嶅悜閿储寮曢€氳繃鍙嶅悜閿繚鎸佺储寮曠殑鎵€鏈夊彾瀛愰敭涓婄殑鎻掑叆鍒嗗竷銆傛湁鏃讹紝鍙敤鍙嶅悜閿储寮曟潵閬垮厤涓嶅钩琛$殑绱㈠紩銆傚浜庡弽鍚戦敭绱㈠紩鍙互杩涜涓嬮潰鎿嶄綔锛?
l 閫氳繃鍦ˋLTER INDEX鍛戒护鍚庡姞REBUILD NOREVERSE鎴朢EBUILD REVERSE瀛愬彞鏉ヤ娇绱㈠紩杈逛负鍙嶅悜閿储寮曟垨鏅€氱储寮曪紱
l 閲囩敤鑼冨洿鎵弿鐨勬煡璇笉鑳戒娇鐢ㄥ弽鍚戦敭绱㈠紩锛?
l 浣嶅浘绱㈠紩涓嶈兘鍙嶅悜锛?
l 绱㈠紩缂栨帓琛ㄤ笉鑳藉弽鍚戙€?
渚?锛氬垱寤轰竴涓弽鍚戦敭绱㈠紩锛?
CREATE INDEX i ON t (a,b,c) REVERSE;
渚?锛氫娇涓€涓储寮曞彉涓哄弽鍚戦敭绱㈠紩锛?
ALTER INDEX i REBUILD NOREVERSE;
搂3.6.3 绱㈠紩缁勭粐琛?
涓庢櫘閫氱殑绱㈠紩涓嶄竴鏍凤紝绱㈠紩缁勭粐琛紙Index_Organized Table锛夋槸鏍规嵁琛ㄦ潵瀛樺偍鏁版嵁锛屽嵆灏嗙储寮曞拰琛ㄥ瓨鍌ㄥ湪涓€璧枫€傝繖鏍风殑绱㈠紩缁撴瀯琛紙Index_organized table鈥擨OT锛夌殑鐗圭偣鏄細瀵硅〃鏁版嵁鐨勬敼鍙橈紝濡傛彃鍏ヤ竴鏂拌銆佸垹闄ゆ煇琛岄兘寮曡捣绱㈠紩鐨勬洿鏂般€?
绱㈠紩缁勭粐琛ㄥ氨璞″甫涓€涓垨澶氫釜鍒楁墍鏈夌殑鏅€氳〃涓€鏍凤紝浣嗙储寮曠粍缁囪〃鍦˙-鏍戠储寮曠粨鏋勭殑鍙惰妭鐐逛笂瀛樺偍琛屾暟鎹€傞€氳繃鍦ㄧ储寮曠粨鏋勪腑瀛樺偍鏁版嵁锛岀储寮曠粍缁囪〃鍑忓皯浜嗘€荤殑瀛樺偍閲忥紝姝ゅ锛岀储寮曠粍缁囪〃涔熸敼鍠勮闂€ц兘銆?
鐢变簬琛ㄤ腑鐨勮涓嶣_鏍戠储寮曞瓨鏀惧湪涓€璧凤紝姣忎釜琛岄兘娌℃湁ROWID锛岃€屾槸鐢ㄤ富閿潵鏍囪瘑銆備絾鏄疧racle浼氣€滅寽鈥濊繖浜涜鐨勪綅缃苟涓烘瘡涓鍒嗛厤閫昏緫鐨凴OWID銆傛澶栵紝浣犲彲浠ヤ负杩欐牱鐨勮〃寤虹珛绗簩涓储寮曘€?
鍒涘缓绱㈠紩缁撴瀯琛ㄤ篃鏄敤CREATE TABLE 鍛戒护鍔燨RGANIZATION INDEX鍏抽敭瀛楁潵瀹炵幇銆備絾鏄紝杩欐牱鐨勮〃鍦ㄥ垱寤哄畬鍚庯紝浣犺繕蹇呴』涓鸿琛ㄥ缓绔嬩竴涓富閿€?
渚嬪瓙锛?
CREATE TABLE IOT_EXPAMPLE
(
Pk_col1 number(4),
Pk_col2 varchar2(10),
Non_pk_col1 varchar2(40),
Non_pk_col2 date,
CONSTRAINT pk_iot PRIMARY KEY
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ( pk_col1, pk_col2)
)
ORGANIZATION INDEX
TABLESPACE INDEX
STORAGE( INITIAL 1M NEXT 512K PCTINCREASE 0 );
绱㈠紩缁勭粐琛ㄦ湁浜涢檺鍒讹細
l 涓嶈兘浣跨敤鍞竴绾︽潫锛?
l 蹇呴』鍏锋湁涓€涓富閿紱
l 涓嶈兘寤虹珛绨囷紱
l 涓嶈兘鍖呭惈LONG绫诲瀷鍒楋紱
l 涓嶆敮鎸佸垎甯冨拰澶嶅埗銆?
鎻愮ず锛氬鏋滃缓绔嬩簡绱㈠紩缁勭粐琛紝鍒欎細鍦―BA_TABLES涓殑IOT_TYPE鍜孖OT_NAME鍒椾笂璁板綍鏈夌储寮曠粍缁囪〃鐨勪俊鎭€?
渚?锛庝慨鏀圭储寮曠粨鏋勮〃 docindex 鐨勭储寮曟鐨処NITRANS鍙傛暟锛?
ALTER TABLE docindex INITRANS 4;
渚?锛庝笅闈㈣鍙ュ姞涓€涓殑婧㈠嚭鏁版嵁娈靛埌绱㈠紩缁勭粐琛?docindex涓細
ALTER TABLE docindex ADD OVERFLOW;
渚?锛庝笅闈㈣鍙ヤ负绱㈠紩缁勭粐琛?docindex鐨勬孩鍑烘暟鎹淇敼INITRANS鍙傛暟锛?
ALTER TABLE docindex OVERFLOW INITRANS 4;
============================================================================================================
閫傚綋鐨勪娇鐢ㄧ储寮曞彲浠ユ彁楂樻暟鎹绱㈤€熷害锛屽彲浠ョ粰缁忓父闇€瑕佽繘琛屾煡璇㈢殑瀛楁鍒涘缓绱㈠紩
oracle鐨勭储寮曞垎涓?绉?鍞竴绱㈠紩锛岀粍鍚堢储寮曪紝鍙嶅悜閿储寮曪紝浣嶅浘绱㈠紩锛屽熀浜庡嚱鏁扮殑绱㈠紩
鍒涘缓绱㈠紩鐨勬爣鍑嗚娉?
CREATE INDEX 绱㈠紩鍚?ON 琛ㄥ悕 (鍒楀悕)聽
聽聽聽聽 TABLESPACE 琛ㄧ┖闂村悕;聽
鍒涘缓鍞竴绱㈠紩:
CREATE unique INDEX 绱㈠紩鍚?ON 琛ㄥ悕 (鍒楀悕)聽
聽聽聽聽 TABLESPACE 琛ㄧ┖闂村悕;聽
鍒涘缓缁勫悎绱㈠紩:
CREATE INDEX 绱㈠紩鍚?ON 琛ㄥ悕 (鍒楀悕1,鍒楀悕2)聽
聽聽聽聽 TABLESPACE 琛ㄧ┖闂村悕;聽
鍒涘缓鍙嶅悜閿储寮?
CREATE INDEX 绱㈠紩鍚?ON 琛ㄥ悕 (鍒楀悕) reverse
聽聽聽聽 TABLESPACE 琛ㄧ┖闂村悕;聽
鏌ョ湅鏂囩珷聽聽聽
oracle 鏌ョ湅绱㈠紩绫诲埆浠ュ強鏌ョ湅绱㈠紩瀛楁琚紩鐢ㄧ殑瀛楁鏂规硶2008骞?1鏈?4鏃?鏄熸湡浜?13:20鏌ョ湅绱㈠紩涓暟鍜岀被鍒?
select * from user_indexes where table='琛ㄥ悕' ;
鏌ョ湅绱㈠紩琚储寮曠殑瀛楁
SQL>select * from user_ind_columns where index_name=upper('&index_name');
PS:
鏌ョ湅鏌愯〃鐨勭害鏉熸潯浠?
SQL>select constraint_name, constraint_type,search_condition, r_constraint_name聽
from user_constraints where table_name = upper('&table_name');聽
SQL>select c.constraint_name,c.constraint_type,cc.column_name聽
from user_constraints c,user_cons_columns cc聽
where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')聽
and c.owner = cc.owner and c.constraint_name = cc.constraint_name聽
order by cc.position;
鏌ョ湅瑙嗗浘鐨勫悕绉?
SQL>select view_name from user_views;



Oracle绱㈠紩index鍒涘缓鍒犻櫎聽

鍦ㄦ煡涓枃瀛楀吀鐨勬椂鍊欙紝鎴戜滑涔嬫墍浠ヨ兘澶熷緢蹇殑鏌ュ埌鎵€瑕佹煡鎵剧殑瀛楁槸鍥犱负瀛楀吀寤虹珛浜嗙储寮曘€傚悓鏍凤紝涓轰簡楂樻晥鐨勮幏鍙栨暟鎹紝鍦ㄦ暟鎹噺姣旇緝澶х殑鏃跺€欙紝鎴戜滑闇€瑕佺粰琛ㄤ腑鐨勬煇涓€鍒楀缓绔嬬储寮曘€?
寤虹珛绱㈠紩鐨勪綔鐢ㄦ槸鏄庢樉鐨勶紝涓昏鏈夛細
1銆佸揩閫熷瓨鍙栨暟鎹?
2銆佹敼鍠勬暟鎹簱鎬ц兘锛屼繚璇佸垪鍊肩殑鍞竴鎬?
3銆佸湪浣跨敤order聽

鎸夌収瀛樺偍鏂规硶鍙互灏嗙储寮曞垎涓築*鏍戠储寮曞拰浣嶅浘绱㈠紩銆?
B*鏍戠储寮曪細椤惧悕鎬濅箟鍏跺瓨鍌ㄧ被鍨嬪氨鏄竴妫垫爲锛屾湁鍒嗘敮鍜屽彾锛屽垎鏀浉褰撲簬涔︾殑澶х洰褰曪紝鍙跺垯鐩稿綋浜庡叿浣撶殑涔﹂〉銆侽racle鐢˙*鏍戞満鍒跺瓨鍌ㄧ储寮曟潯鐩紝鍙互淇濊瘉鐢ㄦ渶鐭矾寰勮闂敭鍊笺€傞粯璁ゆ儏鍐典笅澶у浣跨敤B*鏍戠储寮曘€?
浣嶅浘绱㈠紩锛氫綅鍥剧储寮曞瓨鍌ㄤ富瑕佺敤浜庤妭鐪佺┖闂达紝鍑忓皯Oracle瀵规暟鎹潡鐨勮闂紝瀹冮噰鐢ㄤ綅鍥惧亸绉绘柟寮忔潵涓庤〃鐨勮id鍙峰搴旓紝閲囩敤浣嶅浘绱㈠紩涓€鑸槸閲嶅鍊煎お澶氱殑琛ㄥ瓧娈点€備綅鍥剧储寮曞湪瀹為檯瀵嗛泦鍨婳LTP(鏁版嵁浜嬪姟澶勭悊)涓敤寰楁瘮杈冨皯锛屽洜涓篛LTP浼氬琛ㄨ繘琛屽ぇ閲忕殑鍒犻櫎銆佷慨鏀广€佹坊鍔犳搷浣滐紝Oracle姣忔杩涜杩欎簺鎿嶄綔鐨勬椂鍊欓兘浼氬瑕佹搷浣滅殑鏁版嵁鍧楀姞閿侊紝浠ラ槻姝㈠浜烘搷浣滃鏄撲骇鐢熺殑鏁版嵁鍧楅攣绛夊緟鐢氳嚦姝婚攣鐜拌薄銆傝€屽湪OLAP(鏁版嵁鍒嗘瀽澶勭悊)涓簲鐢ㄤ綅鍥炬湁浼樺娍锛屽洜涓篛LAP涓ぇ閮ㄥ垎鏄鏁版嵁搴撶殑鏌ヨ鎿嶄綔锛岃€屼笖涓€鑸噰鐢ㄦ暟鎹粨搴撴妧鏈紝鎵€浠ュぇ閲忔暟鎹噰鐢ㄤ綅鍥剧储寮曡妭鐪佺┖闂存瘮杈冩槑鏄俱€偮?

寤虹珛绱㈠紩锛?
璇硶鏍煎紡锛?

Sql浠g爜 聽
create聽[unique聽|聽bitmap]聽index聽[schema.]indexName聽聽聽
on聽[schema.]tableName(columnName[ASC聽|聽DESC],...n)聽聽聽
[tablespace聽tablespaceName]聽[nosort]聽[reverse]聽聽

鍏朵腑锛寀nique鎸囧畾绱㈠紩鎵€鍩轰簬鐨勫垪鍊煎繀椤诲敮涓€銆傞粯璁ょ殑绱㈠紩鏄潪鍞竴绱㈠紩銆侽racle寤鸿涓嶈鍦ㄨ〃涓婃樉绀虹殑瀹氫箟unique绱㈠紩銆侭ITMAP鎸囧畾寤虹珛浣嶅浘绱㈠紩銆偮?
鍒犻櫎绱㈠紩锛?

Sql浠g爜 聽
drop聽index聽indexName;

Oracle涓殑绱㈠紩璇﹁В

鏈〉鍖呭惈5寮犲浘鐗囷紝榛樿鏈姞杞斤紝鏄剧ず鎵€鏈夊浘鐗?

crazy

涓€銆?ROWID鐨勬蹇?

瀛樺偍浜唕ow鍦ㄦ暟鎹枃浠朵腑鐨勫叿浣撲綅缃細64浣?缂栫爜鐨勬暟鎹紝A-Z, a-z, 0-9, +, 鍜?/锛?

row鍦ㄦ暟鎹潡涓殑瀛樺偍鏂瑰紡

SELECT ROWID, last_name FROM hr.employees WHERE department_id = 20;

姣?濡傦細OOOOOOFFFBBBBBBRRR

OOOOOO锛歞ata object number, 瀵瑰簲dba_objects.data_object_id

FFF锛歠ile#, 瀵瑰簲v$datafile.file#

BBBBBB锛歜lock#

RRR锛歳ow#

Dbms_rowid鍖?

SELECT dbms_rowid.rowid_block_number('AAAGFqAABAAAIWEAAA') from dual;

鍏?浣撳埌鐗瑰畾鐨勭墿鐞嗘枃浠?

浜屻€?绱㈠紩鐨勬蹇?

1銆?绫讳技涔︾殑鐩綍缁撴瀯

2銆?Oracle 鐨勨€滅储寮曗€濆璞★紝涓庤〃鍏宠仈鐨勫彲閫夊璞★紝鎻愰珮SQL鏌ヨ璇彞鐨勯€熷害

3銆?绱㈠紩鐩存帴鎸囧悜鍖呭惈鎵€鏌ヨ鍊肩殑琛岀殑浣嶇疆锛屽噺灏戠鐩業/O

4銆?涓庢墍绱㈠紩鐨勮〃鏄浉浜掔嫭绔嬬殑鐗╃悊缁撴瀯

5銆?Oracle 鑷姩浣跨敤骞剁淮鎶ょ储寮曪紝鎻掑叆銆佸垹闄ゃ€佹洿鏂拌〃鍚庯紝鑷姩鏇存柊绱㈠紩

6銆?璇硶锛欳REATE INDEX index ON table (column[, column]...);

7銆?B-tree缁撴瀯(闈瀊itmap)锛?

[涓€]浜嗚В绱㈠紩鐨勫伐浣滃師鐞嗭細

琛細emp

鐐瑰嚮鍔犺浇鍥剧墖
鐩爣锛氭煡璇rank鐨勫伐璧剆alary

寤虹珛绱?寮曪細create index emp_name_idx on emp(name);

鐐瑰嚮鍔犺浇鍥剧墖


鐐瑰嚮鍔犺浇鍥剧墖

[璇曢獙]娴嬭瘯绱㈠紩鐨勪綔鐢細
1. 杩愯/rdbms/admin/utlxplan 鑴氭湰

2. 寤虹珛娴嬭瘯琛?

create table t as select * from dba_objects;

insert into t select * from t;

create table indextable

as select rownum id,owner,object_name,subobject_name,

object_id,data_object_id,object_type,created

from t;

3. set autotrace trace explain

4. set timing on

5. 鍒嗘瀽琛紝鍙互寰楀埌cost

6. 鏌ヨ object_name=鈥橠BA_INDEXES鈥?

7. 鍦╫bject_name鍒椾笂寤虹珛绱㈠紩

8. 鍐嶆煡璇?

[鎬濊€僝绱㈠紩鐨勪唬浠凤細

鎻掑叆锛屾洿鏂?

涓夈€?鍞竴绱㈠紩

1銆?浣曟椂鍒涘缓锛氬綋鏌愬垪浠绘剰涓よ鐨勫€奸兘涓嶇浉鍚?

2銆?褰撳缓绔婸rimary Key(涓婚敭)鎴栬€匲nique constraint(鍞竴绾︽潫)鏃讹紝鍞竴绱㈠紩灏嗚鑷姩寤虹珛

3銆?璇硶锛欳REATE UNIQUE INDEX index ON table (column);

4銆?婕旂ず

鍥涖€?缁勫悎绱㈠紩

1銆?浣曟椂鍒涘缓锛氬綋涓や釜鎴栧涓垪缁忓父涓€璧峰嚭鐜板湪where鏉′欢涓椂锛屽垯鍦ㄨ繖浜涘垪涓婂悓鏃跺垱寤虹粍鍚堢储寮?

2銆?缁勫悎绱㈠紩涓垪鐨勯『搴忔槸浠绘剰鐨勶紝涔熸棤闇€鐩搁偦銆備絾鏄缓璁皢鏈€棰戠箒璁块棶鐨勫垪鏀惧湪鍒楄〃鐨勬渶鍓嶉潰

3銆?婕旂ず(缁勫悎鍒楋紝鍗曠嫭鍒?

浜斻€?浣嶅浘绱㈠紩

1銆?浣曟椂鍒涘缓锛?

鍒椾腑鏈夐潪甯稿鐨勯噸澶嶇殑鍊兼椂鍊欍€備緥濡傛煇鍒椾繚瀛樹簡 鈥滄€у埆鈥濅俊鎭€?

Where 鏉′欢涓寘鍚簡寰堝OR鎿嶄綔绗︺€?

杈冨皯鐨剈pdate鎿嶄綔锛屽洜涓鸿鐩稿簲鐨勮窡鏂版墍鏈夌殑bitmap

2銆?缁撴瀯锛氫綅鍥剧储寮曚娇鐢ㄤ綅鍥句綔涓洪敭鍊硷紝瀵逛簬琛ㄤ腑鐨勬瘡涓€鏁版嵁琛屼綅鍥惧寘鍚簡TRUE(1)銆丗ALSE(0)銆佹垨NULL鍊笺€?

3銆?浼樼偣锛氫綅鍥句互涓€绉嶅帇缂╂牸寮忓瓨鏀撅紝鍥犳鍗犵敤鐨勭鐩樼┖闂存瘮鏍囧噯绱㈠紩瑕佸皬寰楀

4銆?璇硶锛欳REATE BITMAP INDEX index ON table (column[, column]...);

5銆?鎺╅グ锛?

create table bitmaptable as select * from indextable where owner in('SYS','PUBLIC');

鍒嗘瀽锛屾煡鎵撅紝寤虹珛绱㈠紩锛屾煡鎵?

鍏€?鍩轰簬鍑芥暟鐨勭储寮?

聽聽 1銆?浣曟椂鍒涘缓锛氬湪WHERE鏉′欢璇彞涓寘鍚嚱鏁版垨鑰呰〃杈惧紡鏃?

2銆?鍑芥暟鍖呮嫭锛氱畻鏁拌〃杈惧紡銆丳L/SQL鍑芥暟銆佺▼搴忓寘鍑芥暟銆丼QL鍑芥暟銆佺敤鎴疯嚜瀹氫箟鍑芥暟銆?

3銆?璇硶锛欳REATE INDEX index ON table (FUNCTION(column));

4銆?婕旂ず

蹇呴』瑕佸垎鏋愯〃锛屽苟涓?query_rewrite_enabled=TRUE

鎴栬€呬娇鐢ㄦ彁绀?*+ INDEX(ic_index)*/

涓冦€?鍙嶅悜閿储寮?

鐩殑锛氭瘮濡傜储寮曞€兼槸涓€涓嚜鍔ㄥ闀跨殑鍒楋細

鐐瑰嚮鍔犺浇鍥剧墖
澶氫釜鐢ㄦ埛瀵归泦涓湪灏戞暟鍧椾笂鐨勭储寮曡杩涜淇敼锛屽鏄撳紩璧疯祫婧愮殑浜夌敤锛屾瘮濡傚鏁版嵁鍧楃殑绛夊緟銆傛鏃跺缓绔嬪弽鍚戠储 寮曘€?

鎬ц兘闂锛?

璇硶锛?

閲嶅缓涓烘爣鍑嗙储寮曪細鍙嶄箣涓嶈

鍏€?閿帇缂╃储寮?

姣斿琛╨andscp鐨勬暟鎹涓嬶細

site feature job

Britten Park, Rose Bed 1, Prune

Britten Park, Rose Bed 1, Mulch

Britten Park, Rose Bed 1,Spray

Britten Park, Shrub Bed 1, Mulch

Britten Park, Shrub Bed 1, Weed

Britten Park, Shrub Bed 1, Hoe

鈥︹€?

鏌ヨ鏃讹紝浠ヤ笂3鍒楀潎鍦╳here鏉′欢涓悓鏃跺嚭鐜帮紝鎵€浠ュ缓绔嬪熀浜庝互涓?鍒楃殑缁勫悎绱㈠紩銆備絾鏄彂鐜伴噸澶嶅€煎緢澶氾紝鎵€浠ヨ€冭檻鍘嬬缉鐗规€с€?

Create index zip_idx

on landscp(site, feature, job)

compress 2;

灏嗙储寮曢」鍒嗘垚鍓嶇紑(prefix)鍜屽悗缂€(postfix)涓ら儴鍒嗐€傚墠涓ら」琚斁缃埌鍓嶇紑閮ㄥ垎銆?

Prefix 0: Britten Park, Rose Bed 1

Prefix 1: Britten Park, Shrub Bed 1

瀹為檯鎵€浠ョ殑缁撴瀯涓猴細

0 Prune

0 Mulch

0 Spray

1 Mulch

1 Weed

1 Hoe

鐗圭偣锛氱粍鍚堢储寮曠殑鍓嶇紑閮ㄥ垎鍏?鏈夐潪閫夋嫨鎬ф椂锛岃€冭檻浣跨敤鍘嬬缉銆傚噺灏慖/O,澧炲姞鎬ц兘銆?

涔濄€?绱㈠紩缁勭粐琛?IOT)

灏嗚〃涓殑鏁版嵁鎸夌収绱?寮曠殑缁撴瀯瀛樺偍鍦ㄧ储寮曚腑锛屾彁楂樻煡璇㈤€熷害銆?

鐗虹壊鎻掑叆鏇存柊鐨勬€ц兘锛屾崲鍙栨煡璇?鎬ц兘銆傞€氬父鐢ㄤ簬鏁版嵁浠撳簱锛屾彁渚涘ぇ閲忕殑鏌ヨ锛屾瀬灏戠殑鎻掑叆淇敼宸ヤ綔銆?

蹇呴』鎸囧畾涓婚敭銆傛彃鍏ユ暟鎹椂锛屼細鏍规嵁涓婚敭鍒楄繘琛孊鏍戠储寮曟帓搴忥紝鍐欏叆纾佺洏銆?

鍗併€?鍒嗗尯绱㈠紩

绨?

A cluster is a group of tables that share the same data blocks because they share common columns and are often used together.

oracle涓渶甯哥敤鐨勭储寮曞氨涓ょ锛欱鏍戠储寮曞拰浣嶅浘绱㈠紩锛岃繖閲屽氨鏉ョ畝鍗曡涓嬭繖涓ょ绱㈠紩鐨勪娇鐢ㄣ€?
B-鏍戠储寮曞湪Oracle涓槸涓€涓€氱敤鐨勭储寮曪紝鍦ㄥ垱寤虹储寮曟椂瀹冨氨鏄粯璁ょ殑绱㈠紩绫诲瀷銆傛渶澶氬彲浠ュ寘鎷?2鍒椼€?
浣嶅浘绱㈠紩Oracle涓烘瘡涓敮涓€閿垱寤轰竴涓綅鍥撅紝鐒跺悗鎶婁笌閿€兼墍鍏宠仈鐨凴OWID淇濆瓨涓轰綅鍥俱€傛渶澶氬彲浠ュ寘鎷?0鍒椼€?
涓€鑸儏鍐典笅锛屽ぇ澶氭暟鐢ㄦ埛閮藉彧鍒涘缓TYPE涓篘ORMAL鐨凚-鏍戠储寮曪紝鎵€浠ュ浜庤緝浣庡熀鏁扮殑鍒楁垜浠兘鏄笉鍒涘缓绱㈠紩鐨勶紝鍥犱负B-鏍戠储寮曞鏌ヨ閫熷害鎻愬崌涓嶄竴瀹氫細鏈夋敼鍠勶紝鐢氳嚦浼氬鍔營nsert銆乁pdate銆丏elete鍛戒护鎵€娑堣€楃殑鏃堕棿銆?
浣嶅浘绱㈠紩鍦ㄥ姞杞借〃锛堟彃鍏ユ搷浣滐級鏃堕€氬父瑕佹瘮B-鏍戠储寮曞仛寰楀ソ銆傞€氬父锛屼綅鍥剧储寮曡姣斾竴涓綆鍩烘暟锛堝緢灏戜笉鍚屽€硷級涓婄殑B-鏍戠储寮曡蹇?~4鍊嶏紝浣嗗鏋滄柊澧炵殑鍊煎崰鎻掑叆琛岀殑70%浠ヤ笂鏃讹紝B-鏍戠储寮曢€氬父浼氭洿蹇竴浜涖€傚綋姣忔潯璁板綍閮藉鍔犱竴涓柊鍊兼椂锛孊-鏍戠储寮曡姣斾綅鍥剧储寮曞揩3鍊嶃€?
寤鸿涓嶈鍦ㄤ竴浜涜仈鏈轰簨鍔″鐞嗭紙OLTP锛夊簲鐢ㄧ▼搴忎腑浣跨敤浣嶅浘绱㈠紩銆侭-鏍戠储寮曠殑绱㈠紩鍊间腑鍖呭惈ROWID锛岃繖鏍稯racle灏卞彲浠ュ湪琛岀骇鍒笂閿佸畾绱㈠紩銆備綅鍥剧储寮曡瀛樺偍涓哄帇缂╃殑绱㈠紩鍊硷紝鍏朵腑鍖呭惈浜嗕竴涓寖鍥村唴鐨凴OWID锛屽洜姝RACLE蹇呴』閽堝涓€涓粰瀹氬€奸攣瀹氭墍鏈夎寖鍥村唴鐨凴OWID銆傝繖绉嶉攣瀹氬彲鑳借嚜闃挎煇浜汥ML璇彞涓€犳垚姝婚攣銆係ELECT璇彞涓嶄細鍙楀埌杩欑閿佸畾闂鐨勫奖鍝嶃€?
浣嶅浘绱㈠紩鏈夊緢澶氶檺鍒讹細
1銆?鍩轰簬瑙勫垯鐨勪紭鍖栧櫒涓嶄細鑰冭檻浣嶅浘绱㈠紩
2銆?褰撴墽琛孉TLER TABLE璇彞锛屽苟淇敼鍖呭惈鏈変綅鍥剧储寮曠殑鍒楁椂锛屼細浣夸綅鍥剧储寮曞疄鏁?
3銆?浣嶅浘绱㈠紩鍦ㄧ储寮曞潡涓偍瀛樹簡绱㈠紩閿殑鍊硷紱鐒惰€岋紝浠栦滑骞朵笉鑳界敤鎴蜂换浣曠被鍨嬬殑瀹屾暣鎬ф鏌?
4銆?浣嶅浘绱㈠紩涓嶈兘琚敵鏄庝负鍞竴绱㈠紩
浠ヤ笂鏄彺寮曠殑涓€浜涚畝鍗曟蹇碉紝涓嬮潰鏄垜瀹為檯宸ヤ綔涓€荤粨鍑烘潵鐨勶細
鎴戣鍋氫竴涓煡璇紝娑夊強涓や釜琛╰_sym_dict,t_sym_operlog锛岃〃缁撴瀯鍒嗗埆濡備笅锛?
X
鍏朵腑t_sym_operlog鐨勭储寮曞涓嬶細

涓婇潰鍩烘暟姣旇緝灏忕殑涓夊垪鍒涘缓浜嗕綅鍥剧储寮?
t_sym_dict鐨勭储寮曞涓嬶細

鏌ヨ璇彞濡備笅锛?
select (select c.dict_name
from t_sym_dict c
where c.dict_typeid = 'SYM_CITYINFO'
and c.dict_id = t.memo) 鍒嗗叕鍙?
t.staff_id 宸ュ彿
from t_sym_operlog t
where t.operlog_subtype = '103'
and t.obj_type = 'CUSTLINKINFO'
and t.memo = '200'
-- and t.extsys_code = ''
-- and t.staff_id = ''
and t.oper_date >= to_date('20110501000000', 'yyyymmddhh24miss')
and t.oper_date <= to_date('20110530000000', 'yyyymmddhh24miss')
-- order byt.memo, t.oper_date
鐒跺悗灏卞嚭鐜颁簡濡備笅濂囨€殑鐜拌薄锛堢储寮曠殑鍒涘缓娌℃湁闂锛?
1銆佺储寮曚娇鐢ㄦ甯?

2銆佷笅闈㈢殑鐪嬩笉鍒皁per_date绱㈠紩鐨勪娇鐢?

3銆佷笅闈㈢殑鐪嬩笉鍒皌_sym_operlog琛ㄧ殑绱㈠紩浣跨敤

灏濊瘯鐨勮В鍐崇殑鍔炴硶锛?
瀵规暟鎹〃鍋氶噰闆嗭紝灏辨槸analysis
BEGIN
DBMS_STATS.gather_table_stats(ownname => 'CSID',tabname => 't_sym_operlog_back');
end;
鐚滄祴鐨勫鑷村師鍥狅細
褰撲綘杩愮敤SQL璇█锛屽悜鏁版嵁搴撳彂甯冧竴鏉℃煡璇㈣鍙ユ椂锛孫RACLE灏嗕即闅忎骇鐢熶竴涓€滄墽琛岃鍒掆€濓紝涔熷氨鏄璇彞灏嗛€氳繃浣曠鏁版嵁鎼滅储鏂规鎵ц锛屾槸閫氳繃鍏ㄨ〃鎵弿銆佽繕鏄€氳繃绱㈠紩鎼滃绛夊叾瀹冩柟寮忋€傛悳绱㈡柟妗堢殑閫夌敤涓嶰RACLE鐨勪紭鍖栧櫒鎭伅鐩稿叧銆?
SQL璇彞鐨勬墽琛屾楠?
銆€銆€ 涓€鏉QL璇彞鐨勫鐞嗚繃绋嬭缁忚繃浠ヤ笅鍑犱釜姝ラ銆?
1 璇硶鍒嗘瀽 鍒嗘瀽璇彞鐨勮娉曟槸鍚︾鍚堣鑼冿紝琛¢噺璇彞涓悇琛ㄨ揪寮忕殑鎰忎箟銆?
2 璇箟鍒嗘瀽 妫€鏌ヨ鍙ヤ腑娑夊強鐨勬墍鏈夋暟鎹簱瀵硅薄鏄惁瀛樺湪锛屼笖鐢ㄦ埛鏈夌浉搴旂殑鏉冮檺銆?
3 瑙嗗浘杞崲 灏嗘秹鍙婅鍥剧殑鏌ヨ璇彞杞崲涓虹浉搴旂殑瀵瑰熀琛ㄦ煡璇㈣鍙ャ€?
4 琛ㄨ揪寮忚浆鎹?灏嗗鏉傜殑SQL琛ㄨ揪寮忚浆鎹负杈冪畝鍗曠殑绛夋晥杩炴帴琛ㄨ揪寮忋€?
5 閫夋嫨浼樺寲鍣?涓嶅悓鐨勪紭鍖栧櫒涓€鑸骇鐢熶笉鍚岀殑鈥滄墽琛岃鍒掆€?
6 閫夋嫨杩炴帴鏂瑰紡 ORACLE鏈変笁绉嶈繛鎺ユ柟寮忥紝瀵瑰琛ㄨ繛鎺RACLE鍙€夋嫨閫傚綋鐨勮繛鎺ユ柟寮忋€?
7 閫夋嫨杩炴帴椤哄簭 瀵瑰琛ㄨ繛鎺RACLE閫夋嫨鍝竴瀵硅〃鍏堣繛鎺ワ紝閫夋嫨杩欎袱琛ㄤ腑鍝釜琛ㄥ仛涓烘簮鏁版嵁琛ㄣ€?
8 閫夋嫨鏁版嵁鐨勬悳绱㈣矾寰?鏍规嵁浠ヤ笂鏉′欢閫夋嫨鍚堥€傜殑鏁版嵁鎼滅储璺緞锛屽鏄€夌敤鍏ㄨ〃鎼滅储杩樻槸鍒╃敤绱㈠紩鎴栨槸鍏朵粬鐨勬柟寮忋€?
9 杩愯鈥滄墽琛岃鍒掆€?
鍒嗘瀽锛?
oracle浼樺寲鍣–BO瀛樺湪鐨勫吀鍨嬮棶棰橈細
鏈夋椂锛岃〃鏄庢槑寤烘湁绱㈠紩锛屼絾鏌ヨ杩囩▼鏄剧劧娌℃湁鐢ㄥ埌鐩稿叧鐨勭储寮曪紝瀵艰嚧鏌ヨ杩囩▼鑰楁椂婕暱锛屽崰鐢ㄨ祫婧愬法澶э紝闂鍒板簳鍑哄湪鍝効鍛紵鎸夌収浠ヤ笅椤哄簭鏌ユ壘锛屽熀鏈笂鑳藉彂鐜板師鍥犳墍鍦ㄣ€?
鏌ユ壘鍘熷洜鐨勬楠?
銆€銆€棣栧厛锛屾垜浠纭畾鏁版嵁搴撹繍琛屽湪浣曠浼樺寲妯″紡涓嬶紝鐩稿簲鐨勫弬鏁版槸锛歰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绉嶄笉鍚岀殑鍊硷紝濡?0銆?0銆?0銆?0銆傝櫧鐒秂mp鏁版嵁琛屾湁寰堝锛孫RACLE缂虹渷璁ゅ畾琛ㄤ腑鍒楃殑鍊兼槸鍦ㄦ墍鏈夋暟鎹鍧囧寑鍒嗗竷鐨勶紝涔熷氨鏄姣忕deptno鍊煎悇鏈?5涓囨暟鎹涓庝箣瀵瑰簲銆傚亣璁維QL鎼滅储鏉′欢DEPTNO=10锛屽埄鐢╠eptno鍒椾笂鐨勭储寮曡繘琛屾暟鎹悳绱㈡晥鐜囷紝寰€寰€涓嶆瘮鍏ㄨ〃鎵弿鐨勯珮锛孫RACLE鐞嗘墍褰撶劧瀵圭储寮曗€滆鑰屼笉瑙佲€濓紝璁や负璇ョ储寮曠殑閫夋嫨鎬т笉楂樸€?
銆€銆€浣嗘垜浠€冭檻鍙︿竴绉嶆儏鍐碉紝濡傛灉涓€鐧句竾鏁版嵁琛屽疄闄呬笉鏄湪4绉峝eptno鍊奸棿骞冲潎鍒嗛厤锛屽叾涓湁99涓囪瀵瑰簲鐫€鍊?0锛?000琛屽搴斿€?0锛?000琛屽搴斿€?0锛?000琛屽搴斿€?0銆傚湪杩欑鏁版嵁鍒嗗竷鍥炬涓闄ゅ€间负10澶栫殑鍏跺畠deptno鍊兼悳绱㈡椂锛屾鏃犵枒闂紝濡傛灉绱㈠紩鑳借搴旂敤锛岄偅涔堟晥鐜囦細楂樺嚭寰堝銆傛垜浠彲浠ラ噰鐢ㄥ璇ョ储寮曞垪杩涜鍗曠嫭鍒嗘瀽锛屾垨鐢╝nalyze璇彞瀵硅鍒楀缓绔嬬洿鏂瑰浘锛屽璇ュ垪鎼滈泦瓒冲鐨勭粺璁℃暟鎹紝浣縊RACLE鍦ㄦ悳绱㈤€夋嫨鎬ц緝楂樼殑鍊艰兘鐢ㄤ笂绱㈠紩銆?
銆€銆€绗崄锛岀储寮曞垪鍊兼槸鍚﹀彲涓虹┖锛圢ULL锛夈€傚鏋滅储寮曞垪鍊煎彲浠ユ槸绌哄€硷紝鍦⊿QL璇彞涓偅浜涢渶瑕佽繑鍥濶ULL鍊肩殑鎿嶄綔锛屽皢涓嶄細鐢ㄥ埌绱㈠紩锛屽COUNT锛?锛夛紝鑰屾槸鐢ㄥ叏琛ㄦ壂鎻忋€傝繖鏄洜涓虹储寮曚腑瀛樺偍鍊间笉鑳戒负鍏ㄧ┖銆?
銆€銆€绗崄涓€锛岀湅鏄惁鏈夌敤鍒板苟琛屾煡璇紙PQO锛夈€傚苟琛屾煡璇㈠皢涓嶄細鐢ㄥ埌绱㈠紩銆?
銆€銆€绗崄浜岋紝鐪婸L/SQL璇彞涓槸鍚︽湁鐢ㄥ埌bind鍙橀噺銆傜敱浜庢暟鎹簱涓嶇煡閬揵ind鍙橀噺鍏蜂綋鏄粈涔堝€硷紝鍦ㄥ仛闈炵浉绛夎繛鎺ユ椂锛屽鈥?lt;鈥濓紝鈥?gt;鈥?鈥渓ike鈥濈瓑銆侽RACLE灏嗗紩鐢ㄧ己鐪佸€硷紝鍦ㄦ煇浜涙儏鍐典笅浼氬鎵ц璁″垝閫犳垚褰卞搷銆?
銆€銆€濡傛灉浠庝互涓婂嚑涓柟闈㈤兘鏌ヤ笉鍑哄師鍥犵殑璇濓紝鎴戜滑鍙ソ鐢ㄩ噰鐢ㄥ湪璇彞涓姞hint鐨勬柟寮忓己鍒禣RACLE浣跨敤鏈€浼樼殑鈥滄墽琛岃鍒掆€濄€?
銆€銆€hint閲囩敤娉ㄩ噴鐨勬柟寮忥紝鏈夎娉ㄩ噴鍜屾娉ㄩ噴涓ょ鏂瑰紡銆?
銆€銆€濡傛垜浠兂瑕佺敤鍒癆琛ㄧ殑IND_COL1绱㈠紩鐨勮瘽锛屽彲閲囩敤浠ヤ笅鏂瑰紡锛?
銆€銆€鈥淪ELECT * 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=useri