oracle 五种索引创建
?http://database.51cto.com/art/201010/231388.htm
要在Oracle數(shù)據(jù)庫(kù)中使用索引,首先需要?jiǎng)?chuàng)建Oracle索引。下面就為您介紹創(chuàng)建Oracle索引的方法,希望對(duì)您能有所幫助。
適當(dāng)?shù)氖褂盟饕梢蕴岣邤?shù)據(jù)檢索速度,可以給經(jīng)常需要進(jìn)行查詢的字段創(chuàng)建索引。oracle的索引分為5種:唯一索引,組合索引,反向鍵索引,位圖索引,基于函數(shù)的索引
創(chuàng)建Oracle索引的標(biāo)準(zhǔn)語(yǔ)法:
CREATE INDEX 索引名 ON 表名 (列名)
TABLESPACE 表空間名;
創(chuàng)建唯一索引:
CREATE unique INDEX 索引名 ON 表名 (列名)
TABLESPACE 表空間名;
創(chuàng)建組合索引:
CREATE INDEX 索引名 ON 表名 (列名1,列名2)
TABLESPACE 表空間名;
創(chuàng)建反向鍵索引:
CREATE INDEX 索引名 ON 表名 (列名) reverse
TABLESPACE 表空間名;
以上就是創(chuàng)建Oracle索引的方法介紹。
?
===
http://database.51cto.com/art/201010/231096.htm
使用Oracle函數(shù)索引,無(wú)疑是提高查詢效率的有效方法之一。下面就為您詳細(xì)介紹Oracle函數(shù)索引的使用方法,希望對(duì)您能有所幫助。
談到任何對(duì)列的操作都可能導(dǎo)致全表掃描,例如:
但是這種查詢?cè)诳头到y(tǒng)又經(jīng)常使用,我們可以創(chuàng)建一個(gè)帶有substr函數(shù)的基于Oracle函數(shù)索引,
但是這種查詢?cè)诳头到y(tǒng)又經(jīng)常使用,我們可以創(chuàng)建一個(gè)帶有substr函數(shù)的Oracle函數(shù)索引,
這樣在執(zhí)行上面的查詢語(yǔ)句時(shí),這個(gè)基于函數(shù)的索引將排上用場(chǎng),執(zhí)行計(jì)劃將是(INDEX RANGE SCAN)。
上面的例子中,我們創(chuàng)建了基于函數(shù)的索引,但是如果執(zhí)行下面的查詢:
得到的執(zhí)行計(jì)劃將還是(TABLE ACCESS FULL),因?yàn)橹挥挟?dāng)數(shù)據(jù)列能夠等式匹配時(shí),基于函數(shù)的索引才能生效,這樣對(duì)于這種索引的計(jì)劃和維護(hù)的要求都很高。請(qǐng)注意,向表中添加索引是非常危險(xiǎn)的操作,因?yàn)檫@將導(dǎo)致許多查詢執(zhí)行計(jì)劃的變更。然而,如果我們使用基于函數(shù)的索引就不會(huì)產(chǎn)生這樣的問(wèn)題,因?yàn)镺racle只有在查詢使用了匹配的內(nèi)置函數(shù)時(shí)才會(huì)使用這種類型的索引。
===
http://space.itpub.net/21805468/viewspace-618068
oracle之位圖索引
上一篇 / 下一篇 ?2009-11-03 23:09:11 / 個(gè)人分類:oracle
查看( 458 ) / 評(píng)論( 2 ) / 評(píng)分( 10 / 0 )位圖索引適用于低基數(shù)(low-cardinality)列,所謂低基數(shù)列就是指這個(gè)列只有很少的可取值。
位圖索引的問(wèn)題:
采用位圖索引,一個(gè)鍵指向多行,可能數(shù)以百計(jì)甚至更多。如果更新一個(gè)位圖索引鍵,那么這
個(gè)鍵指向的數(shù)百條記錄會(huì)與你實(shí)際更新的那一行一同被有效地鎖定。
位圖索引的適用場(chǎng)景:
位圖索引是針對(duì)那些值不經(jīng)常改變的字段的,在實(shí)際應(yīng)用中,如果某個(gè)字段的值需要頻繁更新,
那么就不適合在它上面創(chuàng)建位圖索引。
以下為針對(duì)位圖索引的實(shí)驗(yàn):
1.準(zhǔn)備環(huán)節(jié):
--創(chuàng)建一個(gè)表t
SQL> create table t(processed_flag varchar2(1));
表已創(chuàng)建。
--在表t的processed_flag創(chuàng)建一個(gè)位圖索引
SQL> create bitmap index t_idx on t(processed_flag);
索引已創(chuàng)建。
2.在一個(gè)sql*plus會(huì)話中插入一行列值為N的記錄,且先不commit;然后在另一個(gè)sql*plus會(huì)話中也
插入一行列值為N的記錄,這時(shí)發(fā)現(xiàn)后面的會(huì)話會(huì)被阻塞。
--session1
SQL> insert into t values('N');
已創(chuàng)建 1 行。
insert后不提交,則位圖索引中的N鍵被鎖住,任何DML語(yǔ)句只要與N有關(guān)都被阻塞
--session2
SQL> insert into t values('N');
該語(yǔ)句被掛起
--查詢lock情況
這里有兩個(gè)鎖是正常的,因?yàn)槿魏蜠ML操作都會(huì)產(chǎn)生鎖,因?yàn)閮蓚€(gè)DML現(xiàn)在都沒(méi)有commit,所以都會(huì)持有鎖。
關(guān)鍵是看兩個(gè)session的等待事件。可以看到前面的sid=146等待的是SQL*Net message from client,實(shí)際是
處于空閑等待,而sid=147等待的是enq: TX - row lock contention,其實(shí)是在等待sid=146釋放其持有的鎖
兩個(gè)session持有的鎖都為3-SX(Row-X)行級(jí)排它鎖。
select t2.username,
?????? t3.owner,
?????? t3.object_name,
?????? t2.machine,
?????? t2.sid as sid,
?????? t2.serial#,
?????? t2.LAST_CALL_ET,
?????? t2.program,
?????? t1.locked_mode
? from v$locked_object t1, v$session t2, dba_objects t3
?where t1.session_id = t2.sid
?? and t1.OBJECT_ID = t3.object_id
?order by t2.logon_time;
?
USERNAME OWNER??? OBJE MACHINE???????????????????????? SID??? SERIAL# LAST_CALL_ET PROGRAM????LOCKED_MODE
-------- -------- ---- ------------------------------ ---- ---------- ------------ -------------- ------------
SCOTT??? SCOTT??? T??? WORKGROUP\PC-200904261625?????? 146????????? 5????????? 897 sqlplus.exe??3
SCOTT??? SCOTT??? T??? WORKGROUP\PC-200904261625?????? 147???????? 12????????? 894 sqlplus.exe??3
已選擇2行。
--列出指定 ID 的等待事件
可見(jiàn)前面的session sid=146在等待客戶端輸入,實(shí)際上就是等待commit命令,而sid=147則是在等待enq: TX - row lock contention
select SID,EVENT from v$session_wait where sid=147;
SQL> select SID,EVENT from v$session_wait where sid=147;
?SID EVENT
---- ----------------------------------------------------------------
?147 enq: TX - row lock contention
已選擇 1 行。
SQL> select SID,EVENT from v$session_wait where sid=146;
?SID EVENT
---- ----------------------------------------------------------------
?146 SQL*Net message from client
已選擇 1 行。
--查看當(dāng)前被鎖的 session 正在執(zhí)行的 sql 語(yǔ)句
select? /*+? NO_MERGE(a)? NO_MERGE(b)? NO_MERGE(c)? */? a.username,? a.machine,? a.sid,
a.serial#, a.last_call_et "Seconds", b.id1, c.sql_text "SQL"
from v$session a, v$lock b, v$sqltext c
where a.username is not null and a.lockwait = b.kaddr and c.hash_value =a.sql_hash_value
USERNAME MACHINE???????????????????????? SID??? SERIAL#??? Seconds??????? ID1 SQL
-------- ------------------------------ ---- ---------- ---------- ---------- ----------------------
SCOTT??? WORKGROUP\PC-200904261625?????? 147???????? 12?????? 3006???? 327724 insert into t values('N')
--session1 commit后,session2不再等待
SQL> insert into t values('N');
已創(chuàng)建 1 行。
3.在一個(gè)sql*plus會(huì)話中插入一行列值為N的記錄,且先不commit;然后在另一個(gè)sql*plus會(huì)話中
插入一行列值為Y的記錄,這時(shí)發(fā)現(xiàn)二者互不影響。
--session1
SQL> insert into t values('N');
已創(chuàng)建 1 行。
insert后不commit
--session2
SQL> insert into t values('Y');
已創(chuàng)建 1 行。
insert后不commit
--查看lockqingk
可見(jiàn)兩個(gè)session都持有鎖,那么二者的等待事件是什么呢
select t2.username,
?????? t3.owner,
?????? t3.object_name,
?????? t2.machine,
?????? t2.sid as sid,
?????? t2.serial#,
?????? t2.LAST_CALL_ET,
?????? t2.program
? from v$locked_object t1, v$session t2, dba_objects t3
?where t1.session_id = t2.sid
?? and t1.OBJECT_ID = t3.object_id
?order by t2.logon_time;
?
USERNAME OWNER??? OBJE MACHINE???????????????????????? SID??? SERIAL# LAST_CALL_ET PROGRAM
-------- -------- ---- ------------------------------ ---- ---------- ------------ --------------
SCOTT??? SCOTT??? T??? WORKGROUP\PC-200904261625?????? 147???????? 12????????? 114 sqlplus.exe
SCOTT??? SCOTT??? T??? WORKGROUP\PC-200904261625?????? 146???????? 23????????? 108 sqlplus.exe
已選擇2行。
--查看等待事件
可見(jiàn)兩個(gè)session都處于空閑等待
SQL> select SID,EVENT from v$session_wait where sid=146;
?SID EVENT
---- ----------------------------------------------------------------
?146 SQL*Net message from client
已選擇 1 行。
SQL> select SID,EVENT from v$session_wait where sid=147;
?SID EVENT
---- ----------------------------------------------------------------
?147 SQL*Net message from client
已選擇 1 行。
?
?
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的oracle 五种索引创建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 索引的物理结构
- 下一篇: racle B-Tree和Bitmap索