既然有主鍵,為何還要建索引?

2021-09-01 13:55:26 字數 906 閱讀 6009

之前一直沒用過oracle,資料庫的基礎也差,

這幾天garry給講了一些關於索引相關的東西,

雖然懂了不少還是有一些不清楚的地方。

如,

create table nice(

id number(4) constraint pk_id primary key,

name varchar2(20) constraint u_name unique

)

在建表之後就會有兩個index,select * from user_indexes where table_name="nice";可以檢視。

既然primary和unique是可以作為索引的,那麼,為什麼還要建索引呢,

在網上查到的說法,雖然清晰了一點,但是還是不是很清楚。

1.這個主鍵和索引並非是兩個相同的東西,表中的主鍵一般作用是用來對記錄進行區分的,使得記錄可以唯一方便查詢。但是又很多時候我們需要查詢的並不是主鍵,而且其他的屬性,比如學生表的主鍵是「學號」,但是我經常要根據學生的「姓名」來進行查詢,那麼建立索引就會提高查詢效率(但相對的插入和刪除的效率就會變慢)。

至於什麼時候使用索引這個一般是根據場景決定的,索引會加快查詢(select)的速度,但是會減慢(insert和delete)的速度,需要自己根據業務和資料權衡使用,很難有定論

2.主鍵只是不得重複的屬性.按照主鍵查詢,只能挨個的對比,找到相等的就ok

而索引呢,不必挨個對比. 就像雜湊結構(雖然很多資料庫不用雜湊作為資料結構,但相似的道理),索引在你儲存的時候會在鍵與"該組資料的物理位置"(就比如c中的陣列,儲存在連續的區域)建立關係(雜湊中叫做雜湊函式),這樣在查詢的時候:輸入鍵->得到資料的位置->在那個位置上取出資料.所以比挨個對比快的多.

因此索引加快了查詢,但是減慢了儲存(插入,修改). 所以索引適合查詢而不適合寫資料

Oracle建表 索引 主鍵

主鍵 create table emp id number constraint id pr primary key name1 varchar 8 create table emp9 id number name1 varchar 8 constraint aba pr primary key i...

資料庫建帶有主鍵的表PostgreSQL

資料庫的應用 最近用到的是以前沒有接觸過的資料庫 postgresql 1.建立帶有主鍵的列的表,因為在ssh裡主鍵自動增長 這個資料庫和其他的不一樣 基礎的 主鍵自增長 主鍵一般是實際意義不大的列,不能把有實際意義的字段作為主鍵 2.建立表並且表的字段有自增的 create table jzgl ...

查詢沒有主鍵的表 沒有索引的表

1 查詢沒有主鍵的表 沒有索引的表 select so.name as 沒有主鍵的表 from sysobjects so where so.xtype u and objectproperty so.id tablehasprimarykey 0 order by name select so.n...