sqlserver非聚集索引
A. sql索引分為幾類
SQL SERVER中索引類型包括的三種類型分別是
唯一索引(UNIQUE),聚集索引(CLUSTERED) ,非聚集索引(NONCLUSTERED)。
主鍵與唯一索引的區別
主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。 主鍵創建後一定包含一個唯一性索引,唯一性索引並不一定就是主鍵。 唯一性索引列允許空值,而主鍵列不允許為空值。 主鍵列在創建時,已經默認為空值 + 唯一索引了。
主鍵可以被其他表引用為外鍵,而唯一索引不能。 一個表最多隻能創建一個主鍵,但可以創建多個唯一索引。 主鍵更適合那些不容易更改的唯一標識,如自動遞增列、身份證號等。 在 RBO 模式下,主鍵的執行計劃優先順序要高於唯一索引。 兩者可以提高查詢的速度。
B. sql 什麼時候用聚集索引和非聚集索引
1
聚集索引:該索引中鍵值的邏輯順序決定了表中相應行的物理順序。
聚集索引確定表中數據的物理順序。聚集索引類似於電話簿,後者按姓氏排列數據。由於聚集索引規定數據在表中的物理存儲順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
2
聚集索引使用注意事項
定義聚集索引鍵時使用的列越少越好。
•
包含大量非重復值的列。
.•
使用下列運算符返回一個范圍值的查詢:BETWEEN、>、>=、<
和
<=。
•
被連續訪問的列。
•
回大型結果集的查詢。
•
經常被使用聯接或
GROUP
BY
子句的查詢訪問的列;一般來說,這些是外鍵列。對
ORDER
BY
或
GROUP
BY
子句中指定的列進行索引,可以使
SQL
Server
不必對數據進行排序,因為這些行已經排序。這樣可以提高查詢性能。
•
OLTP
類型的應用程序,這些程序要求進行非常快速的單行查找(一般通過主鍵)。應在主鍵上創建聚集索引。
3
聚集索引不適用於:
•
頻繁更改的列
。這將導致整行移動(因為
SQL
Server
必須按物理順序保留行中的數據值)。這一點要特別注意,因為在大數據量事務處理系統中數據是易失的。
•
寬鍵
。來自聚集索引的鍵值由所有非聚集索引作為查找鍵使用,因此存儲在每個非聚集索引的葉條目內。
4
非聚集索引:數據存儲在一個地方,索引存儲在另一個地方,索引帶有指針指向數據的存儲位置。
非聚集索引中的項目按索引鍵值的順序存儲,而表中的信息按另一種順序存儲(這可以由聚集索引規定)。對於非聚集索引,可以為在表非聚集索引中查找數據時常
用的每個列創建一個非聚集索引。有些書籍包含多個索引。例如,一本介紹園藝的書可能會包含一個植物通俗名稱索引,和一個植物學名索引
C. 聚集索引和 非聚集索引是只有SQL SERVER才有的概念
聚集索引
和
非聚集索引
的根本區別是表記錄的排列順序和與
索引
的排列順序是否一致,聚集索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,因為一旦具有第一個索引值的紀錄被找到,具有連續索引值的
記錄
也一定
物理
的緊跟其後。聚集索引的缺點是
對表
進行修改速度較慢,這是為了保持表中的記錄的物理
順序
與索引的順序一致,而把記錄插入到數據頁的相應位置,必須在數據頁中進行數據重排,降低了執行速度。建議使用聚集索引的場合為:
a.此列包含有限數目的不同值;
b.查詢的結果返回一個區間的值;
c.查詢的結果返回某值相同的大量結果集。
非聚集索引指定了表中記錄的
邏輯順序
,但記錄的物理順序和索引的順序不一致,聚集索引和非聚集索引都採用了
B+樹
的
結構
,但非聚集索引的葉子層並不與實際的數據頁相重疊,而採用葉子層包含一個指向表中的記錄在數據頁中的
指針
的方式。非聚集索引比聚集索引層次多,添加記錄不會引起數據順序的重組。建議使用非聚集索引的場合為:
a.此列包含了大量數目不同的值;
b.查詢的結束返回的是少量的結果集;
c.order
by
子句中使用了該列。
是sql這門語言的概念
和軟體
sql
server沒有直接關系!
D. SQLSERVER沒有聚集索引的表都是堆表,那是說堆表包括了非聚集索引的表和沒有索引的表嘛
大概可以這樣理解。
嚴格說,沒有 非聚集索引的表 這一說。只能說 表沒有聚集索引 ,但不能說 非聚集索引的表。
E. sqlserver bool 非聚集索引允許重復 是否有序
這里說的聚集索引是聚簇索引吧。。。
聚簇索引即建立在聚簇上的索引,創建聚簇索引時,需要對已有表數據重新進行排序(若表中已有數據),即刪除原始的表數據後再將排序結果按物理順序插回,故聚簇索引建立完畢後,建立聚簇索引的列中的數據已經全部按序排列。
一個表中只能包含一個聚簇索引,但該索引可以包含多個列。
B-樹索引中,聚簇索引的葉層就是數據頁。
非聚簇索引類似書本索引,索引與數據存放在不同的物理區域,建立非聚簇索引時數據本身不進行排序。一個表中科含多個非聚簇索引。
B-樹索引中,非聚簇索引的葉層仍是索引頁,其以指針指向數據頁實際存儲位置。
唯一性索引保證表中沒有兩行在定義索引的列上具有重復值,ORACLE自動為主鍵和唯一鍵列創建唯一索引;主鍵本身就是唯一索引,反之不成立(唯一索引允許一個NULL值),唯一性索引比非唯一性索引效率高,故在一般情況下,在無重復值的列上應盡量建立唯一性索引。
若為謀個表的某個列創建了唯一索引,則即使這個列沒有唯一值約束,也會被強制限制不能插入重復記錄。
F. sqlserver in 查找在聚集索引和非聚集索引上面的區別
SQL
SERVER提供了兩種索引:聚集索引和非聚集索引。其中聚集索引表示表中存儲的數據按照索引的順序存儲,檢索效率比非聚集索引高,但對數據更新影響較大。非聚集索引表示數據存儲在一個地方,索引存儲在另一個地方,索引帶有指針指向數據的存儲位置,非聚集索引檢索效率比聚集索引低,但對數據更新影響較小。
聚集索引確定表中數據的物理順序。聚集索引類似於電話簿,後者按姓氏排列數據。由於聚集索引規定數據在表中的物理存儲順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
非聚集索引中的項目按索引鍵值的順序存儲,而表中的信息按另一種順序存儲(這可以由聚集索引規定)。對於非聚集索引,可以為在表非聚集索引中查找數據時常用的每個列創建一個非聚集索引。有些書籍包含多個索引。例如,一本介紹園藝的書可能會包含一個植物通俗名稱索引,和一個植物學名索引,因為這是讀者查找信息的兩種最常用的方法。
G. sqlserver怎麼建立索引
--創建索引
CREATE NONCLUSTERED INDEX IX_TEST_TNAME --創建一個非聚集索引
ON TEST(TNAME) --為TEST表的TNAME欄位創建索引
WITH FILLFACTOR = 30 --填充因子為30%
GO
SELECT * FROM TEST(INDEX = IX_TEST_TNAME) WHERE TNAME = 'A' --指定按『IX_TE
H. SQL中怎麼創建非聚集索引
--創建非聚集索引
createnonclusteredindexinx_entry_stock_onentry_stock_d(entry_stock_bi)
--延伸:
--創建聚集索引
createclusteredindexinx_entry_stock_bionentry_stock_d(entry_stock_bi)
--創建主鍵
createtableyourtable
(
idintprimarykey,
namevarchar(50)
)
--增加主鍵
altertableentry_stock_daddprimarykeynonclustered--主鍵且非聚集
(entry_stock_bi,aid)
--除此以外還可以通過SQL Server Management Studio 右擊表 -》設計-》 右擊列 根據右鍵菜單 建立主鍵和索引
I. sql 創建聚集索引和非聚集索引失敗
你這是sqlserver的腳本在oracle跑的結果
聚集和非聚集索引是SQLSERVER里的概念,對應的ORACLE里的 可以參考了解下
SQLSERVER 里的非聚集索引 -> ORACLE里的 堆表的普通索引
SQLSERVER 里的聚集索引 -> ORACLE里的 索引組織表