看板 Database 關於我們 聯絡資訊
※ 引述《bohei (run and fall)》之銘言: : Oracle 的index一直擾著我 ... : goolge很久都找不到我想到的資訊 Oracle的資料非常好找,請上Oracle官網下載相關版本的User Guide : 我想請問的是 : index是將設為index的欄位與rowid另外建立一個table嗎 Index不是Table : 然後依照選擇的欄位排序 : 利用排序後的搜尋速度加快的原理 再去對應的rowid拿取資料 : 這樣的想法對嗎? 這是對的,但是額外一提Oracle跟其他DB不同,Index並不是Create之後, 就一定會使用,這個部份就自己去看User Guide有關RBO與CBO的差別 : 然後第二個問題是unique index : unique index跟index的差別是否只在限制值是唯一 : 其索引原理也是跟普通index相同嗎? 在一般正統的DB上,會有PK與FK的部份,以SQL Server來說是 Create PK同時就會建立該PK的Index (Sorry,我只接觸過Oracle & SQL Server) Oracle在DB Object上的處理態度是比較彈性的,並不會因為 Create PK就同時建立Index,而Oracle 在Index上提供了 1. Unique Index 2. Nomal Index 其實兩者的差別就只在於Unique Index在Insert動作時, 會先驗證是否唯一(如同PK)而已。 (Index就有唯一效果了,何必再建PK,Oracle自家的ERP也幾乎不建 PK) 但有一種情況要注意,若在Oracle Table上建立了PK & Unique Index, 在PL/SQL中對該Table進行DML動作當違反PK限制時(因為Table會先進行 PK的驗證),在PL/SQL並無法使用Exception捕抓錯誤,而是整個PL/SQL 會產生這個錯誤而程式Rollback,無法自行利用PL/SQL來控管邏輯流程。 (這段測試的DB版本是9.2.07,或許10g or 11g不會有這個問題) : 這兩個問題 還麻煩大家解答! : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.142.152 ※ 編輯: fantasyj 來自: 59.117.142.152 (07/09 22:26) ※ 編輯: fantasyj 來自: 59.117.142.152 (07/09 22:32)
bohei:先謝謝fantasyj大的回答,另外我在oracle上 先設PK 再建index 07/09 22:40
bohei:是無法建立index的, 還有另外一個問題是,如果不設PK 那是用 07/09 22:41
bohei:constrant 來限制NOT NULL嗎 因為雖然在建立TABLE時不設PK 07/09 22:43
bohei:在ID的那個欄位還是希望是NOT NULL吧?這樣才能利用ID來搜尋 07/09 22:44
欄位設定不允許null不用Constrant..通常Create Table時就會先宣告了... ex: Create Table test is (test_id number not null ,a varchar2(240) not null); or 事後 Alter Table test Modify(a NOT NULL); ※ 編輯: fantasyj 來自: 59.117.142.152 (07/09 23:46) ※ 編輯: fantasyj 來自: 59.117.142.152 (07/09 23:48) ※ 編輯: fantasyj 來自: 59.117.142.152 (07/09 23:48)
fantasyj:DML語法先研究一下吧, 這比您上面Index的觀念更基本.. 07/09 23:49