當前位置:首頁 » 編程語言 » sql唯一索引什麼意思
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql唯一索引什麼意思

發布時間: 2023-01-03 03:50:35

1. mysql 「索引」能重復嗎「唯一索引」與「索引」區別是什麼

一、使用不同:

主鍵索引是在創建主鍵時一起創建的,是基於主鍵約束而建立的,是不可以為空,也不可以重復。

唯一索是引基於唯一約束而建立的,可以為空不可以重復,主鍵索引本身就具備了唯一索引的功能。

二、作用不同:

唯一索引的作用跟主鍵的作用一樣。不同的是,在一張表裡面只能有一個主鍵,主鍵不能為空,唯一索引可以有多個,唯一索引可以有一條記錄為空,即保證跟別人不一樣就行。

比如學生表,在學校裡面一般用學號做主鍵,身份證則弄成唯一索引;而到了教育局,他們就把身份證號弄成主鍵,學號換成了唯一索引。

三、定義不同:

普通索引:這是最基本的索引類型,而且它沒有唯一性之類的限制。

唯一性索引:這種索引和前面的「普通索引」基本相同,但有一個區別:索引列的所有值都只能出現一次,即必須唯一。

(1)sql唯一索引什麼意思擴展閱讀:

要對一個表建立唯一索引,可以使用關鍵字UNIQUE。對聚簇索引和非聚簇索引都可以使用這個關鍵字。

例子

CREATE UNIQUE CLUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

其中:CLUSTERED INDEX是用來建立聚簇索引的關鍵字,此語句的意思是在表mytable上的mycolumn欄位上創建一個名為myclumn_cindex的聚簇索引,且為唯一索引。

2. SQL SERVER資料庫里的唯一索引UNIQUE和聚集索引、非聚集索引有什麼區別有什麼區別,

索引實際上是一組指向表中數據的指針,索引的排列順序其實就是這組指針的順序.
聚集索引:表的物理存儲順序與指針(即邏輯)順序相同
非聚集索引:物理與邏輯順序不同
因為一個表只能有一個物理順序,所以,聚集索引的個數最多隻能是1.
其中唯一索引是給所做的索引增加了唯一性的約束,添加,修改索引列中數據時,不允許出現重復值.它可以是聚集索引,也可以是非聚集的,就看你如何定義
主鍵索引是把主鍵列定義為索引,主鍵具有唯一性,所以主鍵索引是唯一索引的一種特殊形式

3. SQL Server唯一索引和非唯一索引的區別簡析

SQL Server創建索引時,可以指定Unique使之成為唯一索引。「唯一」顧名思義,但是兩都到底有什麼區別呢?因為索引也是一種物理結構,所以還是要從存儲和結構上分析。

索引結構分葉級和非葉級,分析時我們要分開來看,這個很重要。

文中涉及的索引行大小計算,參考MSDN估計資料庫大小索引部分。

1. 非唯一聚集索引和唯一聚集索引

創建兩個測試表,各10000條整數,tb1唯一,tb2非唯一,有1000條為9999的重復值。

view sourceprint?

01.<img onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_402704').style.display='none'; document.getElementById('Code_Open_Image_402704').style.display='inline'; document.getElementById('Code_Open_Text_402704').style.display='inline';"id="Code_Closed_Image_402704"align="top"src=""width="11"height="16"style="display: none;"><img alt="載入中..."title="圖片載入中..."src="http://www.it165.net/statics/images/s_nopic.gif"><img onclick="this.style.display='none'; document.getElementById('Code_Open_Text_402704').style.display='none'; getElementById('Code_Closed_Image_402704').style.display='inline'; getElementById('Code_Closed_Text_402704').style.display='inline';"id="Code_Open_Image_402704"style="display: none;"align="top"src=""width="11"height="16"><img alt="載入中..."title="圖片載入中..."src="http://www.it165.net/statics/images/s_nopic.gif">Codecreate table tb1

02.(col1int);

03.declare@iint=1

04.while@i<10001

05.begin

06.insert into tb1 values(@i);

07.set@i=@i+1;

08.end;

09.create unique clustered index ucix on tb1 (col1)

10.go

11.-------

12.create table tb2

13.(col2int);

14.declare@iint=1

15.while@i<9001

16.begin

17.insert into tb2 values(@i);

18.set@i=@i+1;

19.end;

20.go

21.insert into tb2 values(9999)

22.go1000;

23.create clustered index cix on tb2 (col2)

24.go

先查詢索引的一些基本狀況:

發現多出一個UNIQUIFIER,同樣葉級也是一樣。MSDN說明:

「如果聚集索引不是唯一的索引,SQL Server 將添加在內部生成的值(稱為唯一值)以使所有重復鍵唯一。此四位元組的值對於用戶不可見。僅當需要使聚集鍵唯一以用於非聚集索引中時,才添加該值。」

還有UNIQUIFIER不是一個全局自增列,重復記錄增加時此值會發生改變,並且它是一個可為null的變長列。

現在來算一算索引行大小:

兩個表都是只有一個int型可為NULL的欄位,而聚集索引葉級是存儲數據本身

葉級是一個4位元組的INT列,無變長列,加上3位元組的NULL點陣圖,再加上4位元組的行頭開銷:兩個表的葉級minSize =4+0+3+4=11

非葉級是一個4位元組的INT列,無變長列,加上3位元組的NULL點陣圖,加上1位元組的行頭開銷,再加6位元組的子頁指針:兩個表的非葉級minSize=4+0+3+1+6=14

tb1的索引行大小是一致的minSize=maxSize,因為它是唯一的。tb2的索引行大小不一致,有大有小,大的索引行是因為:a)不唯一 b)UNIQUIFIER

唯一標識列增加了2+1*2+4=8位元組開銷,tb2的min和max相差就是這8位元組。

tb2的葉級maxSize=4+8+3+4=19

tb2的非葉級maxSize=4+8+3+1+6=22

小結:非唯一聚集索引為保證索引鍵值唯一性,會生成UNIQUIFIER與鍵列一起組成索引鍵值。同時無論在葉級還是非葉頁級,都比唯一索引佔用更多存儲空間。

4. 在SQL中,唯一索引是什麼喲

這種索引和前面的「普通索引」基本相同,但有一個區別:索引列的所有值都只能出現一次,即必須唯一。唯一性索引可以用以下幾種方式創建:

創建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
創建表的時候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );

5. SQL Server唯一索引和非唯一索引的區別簡析

1. 在表和索引設計階段,如果可能,欄位設定為不允許NULL,索引設定為唯一。這樣節約存儲空間並提高了IO效率。
2. 聚集索引鍵列應該盡量選用窄的欄位,因為非聚集索引會引用其鍵列。如果聚集鍵過大則會使非聚集索引同時也佔用更多存儲空間。
3. SQL Server在創建索引時,默認是創建非唯一的。所以在創建索引時,要認真考慮是否可以創建為唯一索引。

6. 創建唯一索引的sql語句是什麼

創建唯一索引的sql語句如下:

  • CREATE [UNIQUE|CLUSTERED] INDEX INDEX_NAME ON TABLE_NAME(PROPERTY_NAME)

  • 其中UNIQUE和CLUSTERED為可選項,分別是建立唯一索引和聚簇索引。

  • 具體解釋為:
    UNIQUE:表示此索引的每一個索引值只對應唯一的數據。
    CLUSTERED:表示要建立的索引時聚簇索引,即索引項的順序與表中記錄的物理順序一致的索引組織。

7. 什麼叫索引索引的作用和分類

在關系資料庫中,索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種存儲結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。

在資料庫系統中建立索引主要有以下作用:

(1)快速取數據;

(2)保證數據記錄的唯一性;

(3)實現表與表之間的參照完整性;

(4)在使用ORDER by、group by子句進行數據檢索時,利用索引可以減少排序和分組的時間。


索引的分類:

1、普通索引

最基本的索引類型,沒有唯一性之類的限制。

2、唯一索引

唯一索引是不允許其中任何兩行具有相同索引值的索引。

3、主鍵索引

簡稱為主索引,資料庫表中一列或列組合(欄位)的值唯一標識表中的每一行。該列稱為表的主鍵。

4、候選索引

與主索引一樣要求欄位值的唯一性,並決定了處理記錄的順序。在資料庫和自由表中,可以為每個表建立多個候選索引。

5、聚集索引

也稱為聚簇索引,在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引, 即如果存在聚集索引,就不能再指定CLUSTERED 關鍵字。

6、非聚集索引

也叫非簇索引,在非聚集索引中,資料庫表中記錄的物理順序與索引順序可以不相同。一個表中只能有一個聚集索引,但表中的每一列都可以有自己的非聚集索引。

8. mysql中,索引,主鍵,唯一索引,聯合索引的區別是對資料庫的性能有什麼影響

索引就相當於對指定的列進行排序,排序有利於對該列的查詢,可以大大增加查詢效率,
建立索引也是要消耗系統資源,所以索引會降低寫操作的效率;
主鍵,唯一,聯合都屬於索引;
主鍵屬於唯一索引,且一個表只能有一個主鍵,主鍵列不允許空值;唯一索引可以一個表中可以有多個,而且允許為空,列中的值唯一;多個欄位的多條件查詢多使用聯合索引。