索引和約束

2022-03-21 04:55:30 字數 3108 閱讀 1054

索引優點

1.索引使得檢索的資料的速度大大加快

2.建立索引時自動新增了唯一性約束,確保每一條資料的唯一性

3.可以加快表與表之間的鏈結,提高多表查詢的速度

4.在分組和排序子句進行資料彙總的時候,顯著減少查詢中分組和排序的時間。

每張表都會有乙個rowid實體地址列,用來唯一標誌一條記錄所在物理

位置乙個id號

b樹索引

位圖索引

重複值較高的字段稱為具有較低的基數,重複值較高的字段則基數較低, 值的可能性列數佔行數 1-

3%在b樹索引中,乙個索引鍵指向一行,通過rowid進行定位

在位圖索引中,為獨立列值建立乙個索引鍵,乙個索引鍵對應多個行

--建立b樹索引

create

index idx_emp on

emp(ename);

--建立位圖索引

create bitmap index bit_emp on

emp(mgr);

--建立函式索引

create

index idx_emp_total_sal on emp(sal*comm+

sal);

select ename,empno from emp where sal*comm+sal>

5000;--

重新命名索引

alter

index index_name rename to

new_name;

--對索引進行分析

analyze index

idx_emp validate structure;

--查詢索引的高度和索引刪除標誌的比率,如果索引高度大於3或索引刪除標記多,需要重建索引

select height,del_lf_rows/lf_rows from

index_stats;

--檢視索引葉塊的使用率,如果過低則需要合併索引

select pct_used from

index_stats;

--重要的資料庫表應該定期重建或合併索引,以便使索引發揮最大的效能

--合併索引

alter

index idx_emp coalesce;--

重新建立索引,更改索引所在的表空間

--重建過程中,會對基表新增共享鎖,無法進行插入,修改和刪除,時間長影響使用者的使用

--採用rebulid online子句

alter

index

idx_emp rebuild online tablespace users;

--監控索引是否得到了使用

--開啟監控

alter

index

idx_emp monitoring usage;

--終止監控

alter

index

idx_emp nomonitoring usage;

--查詢索引是否被正常使用

select index_name,used,start_monitoring,end_monitoring from

v$object_usage

where index_name=

'idx_emp';

--monitoring usage需要占用一定的監視資源,避免繁忙時期監控,

--會導致效能下降,應該選擇乙個合理的空閒時間進行監控

--刪除索引 ,注意約束

drop

index

idx_emp

索引建立的策略

1.在建立主鍵時,會自動建立唯一性約束,b樹

2.對相對於資料較小的表避免使用索引,使用全表掃瞄更合適

3.如果需要訪問的資料不超過表中總數量的4%-5%

,則需要建立索引

4.在建立多表連線查詢時,對連線的列建立索引

5.對在where子句頻繁使用的列建立索引

6.對order by

和group by操作中的列建立索引或涉及排序和union和distinct

7.通常不要在由長字段串組成的列上建立索引

8.不要需要頻繁動態更改列上建立索引

9. 對具有高選擇性的表建立索引,選擇幾乎沒有相同值的表建立索引

10.不要在乙個表中建立大量的索引

11.當唯一等值可能不唯一時需要建立復合索引,索引的順序,使選擇性最高的列作為索引的第1列

約束--

禁用約束

alter

table emp disable constraint sys_c0011558; --

(enable)

1 主鍵 primary

key2 外來鍵 foreign 引用鍵referenced key

3 檢查約束 check(hiredate >to_date('

2010-10-10

'))

4 唯一性約束 unique 非空約束 not

null

5修改約束

alter

table emp add

constraint pk_books primary

key(book_id);

6重新命名約束

alter

table emp rename constraint pk_books to

pk_newbooks

7刪除約束

alter

table books_alt drop

primary

key;

8禁用約束

alter

table emp disable constraint

sys_c0011558;

alter

table emp enable constraint

sys_c0011558;

9刪除約束

alter

table score drop

constraint

fk_sno;

alter

table score drop

primary

key; --

所有主鍵類

索引和約束

一 雖然索引引用可以提高資料的查詢速度,但是任何事物都有雙刃劍,它也有一些缺點 1 索引會佔據一定的磁碟空間,就像有安筆劃的查詢的目錄的書會比沒有這種目錄的書頁數要多一些一樣。2 索引減慢了資料的插入和刪除速度。因為每次刪除更新資料都要更新索引,乙個表擁有的索引越多則寫操作的平均效能下降越大。cre...

mysql 索引與約束 mysql索引和約束區別

一 約束 作用 是為了保證資料的完整性而實現的摘自一套機制,它具體的根據各個不同的資料庫的實現而有不同的工具 約束 這裡主要講解mysql的約束 1 非空約束 not null 指示某列不能儲存null 值 2 唯一約束 unique uk unique約束的字段,要求必須是唯一的,但null除外 ...

索引和約束的刪除

建立主建約束和唯一約束時會自動建立同名索引。相關資料字典 user constraints,user indexes 使用下面命令刪除索引索引時,會提示錯誤。drop index table pk 這是可以刪除約束再刪除索引。alter table table drop constraint tab...