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
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