SQL 主鍵和索引的區別

2021-08-17 23:46:35 字數 1460 閱讀 8124

(1)建立表時,不能在同乙個欄位上建立兩個索引(主鍵預設建立唯一索引),在需要經常查詢的字段上建立索引(如:deal_id已經是主鍵,不能再次執行:create index tmp_table_index on tmp_table(deal_id),會報錯);

a)主鍵:該欄位沒有重複值,且不允許為空

惟一索引:該欄位沒有重複值,但允許空值(該欄位可以有多個null值)

一張table只允許乙個主鍵,但可以建立多個unique index

比如,表中有5行,id的值是   1   2   3   4   5,就可以作為主鍵

但如果id的值是   1   2   3   4   null  null,則可以建立惟一索引,不能作為主鍵

可以為多個字段建立唯一索引:

createunique indexunique_index01 on search_result_tmp(deal_id,compare_flag);

建立唯一索引以後,只允許插入一條如下記錄,插入兩條時會違反unique index約束

insert into search_result_temp values(1,null);

(2)刪除索引:drop index unique_index01;

(3)函式索引

如果在我們的查詢條件使用了函式,那麼索引就不可用了。

可以用建立函式索引的方式,來解決這個問題

例如:select * from product where nvl(price,0.0)>1000.0 ;

這裡,nvl(price,0.0)使用了函式,索引不能利用price欄位上做的索引了

ok,我們來建立函式索引

create index index_price on product(nvl(price,0.0));

(4)其他

唯一索引能極大的提高查詢速度,而且還有唯一約束的作用

一般索引,只能提高30%左右的速度

經常插入,修改,應在查詢允許的情況下,儘量減少索引,因為新增索引,插入,修改等操作,需要更多的時間

1.主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵。

2. 乙個表中可以有多個唯一性索引,但只能有乙個主鍵。

3. 主鍵列不允許空值,而唯一性索引列允許空值。

4. 索引可以提高查詢的速度。

主鍵和索引都是鍵,不過主鍵是邏輯鍵,索引是物理鍵,意思就是主鍵不實際存在,而索引實際存在在資料庫中

主鍵和索引的區別

主鍵 primary key 來自msdn的描述 表通常具有包含唯一標識表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 pk 用於強制表的實體完整性。在建立或修改表時,您可以通過定義 primary key 約束來建立主鍵。乙個表只能有乙個 primary key 約束,並且 prima...

主鍵和索引的區別

1.主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵.所謂主鍵就是能夠唯一標識表中某一行的屬性或屬性組,乙個表只能有乙個主鍵,但可以有多個候選索引。因為主鍵可以唯一標識某一行記錄,所以可以確保執行數 據更新 刪除的時 候不會出現張冠李戴的錯誤。主鍵除了上述作用外,常常與外來鍵構成參照完整性約束,防止...

主鍵和索引的區別

區別 主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。1 主鍵建立後一定包含乙個唯一性索引,唯一性索引並不一定就是主鍵。2 唯一性索引列允許空值,而主鍵列不允許為空值。3 主鍵列在建立時,已經預設為空值 唯一索引了。4 主鍵可以被其他表引用為外來鍵,而唯一索引不能。5 乙個表最多只能建立乙...