例如有如下表:test_tbid
name
***rowid
1zhangsan
0******1
2limei
1******2
3haungqing
0******3
如果在該表中不存在任何索引,那麼在查詢某一條記錄,例如姓名為limei的人,因為查詢到乙個後下面不確定是否還存在姓名為limei的人,因此會進行全表掃瞄查詢。
而如果該錶的姓名欄位上存在索引的情況下,那麼會存在這麼一張索引表:
name
rowid
haungqing
******3
limei
******2
zhangsan
******1
索類分類
唯一索引和非唯一索引,唯一索引則不允許索引列值重複, 非唯一索引可以重複,一般不建議使用唯一索引,而是通過約束來控制列是否執行重複。 索引
單列索引和復合索引,顧名思義,復合索引是多列組成的索引,單列索引則僅一列 ,如果是復合索引,則經常查詢的列應該在最前面,因為如果建立了c1,c2,c3三列復合索引,單獨使用其中的某一列,例如僅僅查詢c1或者c1和c2,則都可以通過該索引提高查詢速度,但如果僅僅訪問c2或者c2和c3,則無法使用該復合索引。
標準索引即b樹索引,而唯一索引非唯一索引就是針對b樹索引來說的
位圖索引,常用於某個列基數比較小的列上,例如test_db中***列,基數為0和1,若用b樹索引的話會返回大量資料,效率會很低。
資料庫生成的點陣圖索引表如下 男女
rowid10
******101
******210
***xx3
5. 函式索引,即在函式,例如substr()函式上建立索引,例如姓名列,如果要查詢的行中姓名忽略大小寫,那麼如果查詢條件姓名是zhangsan,那麼zhangsan就不會被查到,如果用upper(name)=『zhangsan』來轉換為
大寫,則可以完成忽略大小寫,但此時在name列上的索引卻無法使用,因此需要建立函式索引來解決此類問題。
建立索引
create [unique] |[bitmap] index index_name
on table_name([col1 [asc,desc],col2[asc,desc]......]|[express])
[tablespace tablespace_name]
[pctfree n1]
[storage (initial n2)]
[nologging]
[online]
[compute statistics]
[nosort]
例項1,建立b樹索引,即oracle預設索引:
create index index_test_tb on test_tb(name);
例項2,建立位圖索引:
create mitmap index bindex_test_tb on test_tb(***);
例項3,建立函式索引(可以是b樹索引或者位圖索引):
create index funindex_test_db on test_db on test_db upper(name);
修改索引
alter index index_name rename to new_index_name;
合併索引
alter index index_name coalesce;
重建索引,使用rebuild關鍵字
alter index index_name rebuild tablespace tablespace_name;
刪除索引
drop index index_name;
ORALCE資料庫監控指令碼
最近在做資料庫segment的資訊監控,具體什麼意思不是很明白,就是段的意思,總而言之就是監控你的資料庫的一些資訊,看看表空間增長如何,哪些表的行數,索參數量,就好像乙個pl sql一樣,指令碼都來自網上的蒐集指令碼,我不是dba不是很懂這些,只是做了些簡單的關聯資訊,供大家看看,有更好的建議可以提...
Oralce資料庫表資料還原
在執行插入 更新 刪除等操作時,容易產生誤操作,導致資料庫中的內容被修改,通過普通的sql操作無法還原,則可採用oralce資料庫表的閃回機制,將表資料還原到某個時間點,具體如下 先查詢某個時間點的資料是否為要還原的資料 select from tablename as of timestamp t...
資料庫 ORALCE 匯入 匯出資料
exp和imp是客戶端工具程式,它們既可以在客戶端使用,也可以在服務端使用。expdp和impdp是服務端的工具程式,他們只能在oracle服務端使用,不能在客戶端使用。imp只適用於exp匯出的檔案,不適用於expdp匯出檔案 impdp只適用於expdp匯出的檔案,而不適用於exp匯出檔案。cm...