當前位置:首頁 » 編程語言 » sql聚集索引

sql聚集索引

發布時間: 2022-01-10 07:43:24

sql資料庫中僅是否為聚集索引對查詢速度有影響嗎

不一樣,首先聚集索引在一張表上只能建立一個;其次聚集索引中的聚集是指的這張表中的數據在磁碟上的物理排序方式是以聚集索引排序;一個簡單的例子如下:

學號身份證號前4位學號為聚集索引身份證號為聚集索引
003710423
00110811
009510132

在查詢中,主要是看你要以誰為where條件的前綴來進行查詢,比如你用身份證來做為聚集索引但是卻用學號范圍來進行查找,那這個索引就是無效的,你只會得到聚集索引掃描,而聚集索引掃描=堆表掃描;這是針對於聚集索引的情況。

非聚集的話,主要是看索引列的篩選性是否足夠高,並且where條件首句是否使用了這個列,如果沒有使用,就有可能用不到非聚集索引,這個是根據查詢優化器自己判斷的查詢成本來決定的。

② sql server 創建聚集索引

是的,默認是聚集的。

③ SQL聚集索引和非聚集索引的區別

資料庫的索引,聽起來挺神秘的,仔細想想。這些索引,其實就是平時咱們查東西時候常用的兩種手段。無非就是為了提高我們找東西的效率而已。那麼我們平時又是怎麼查東西呢?

聚集索引:

聚集索引,來源於生活嘗試。這中索引可以說是按照數據的物理存儲進行劃分的。對於一堆記錄來說,使用聚集索引就是對這堆記錄 進行 堆劃分。即主要描述的是物理上的存儲。

舉個例子:

比如圖書館新進了一批書。那麼這些書需要放到圖書館內。書如何放呢?一般都有一個規則,雜志類的放到101房間,文學類的放到102房間,理工類的放到103房間等等。這些存儲的規則決定了每本書應該放到哪裡。而這個例子中聚集索引為書的類別。
正式因為這種存儲規則,才導致 聚集索引的唯一性。

誤區:

有的人認為,聚集索引的欄位是唯一的。這是因為sql server 中添加主鍵的時候,自動給主鍵所在的欄位生成一個聚集索引。所以人們會認為聚集索引所加的欄位是唯一的。
思考一下上面這個問題。雜志類的書放到101房間。那麼如果雜志類的書太多,一個101房間存放不下。那麼可能101,201兩個房間來存放雜志類的書籍。如果這樣分析的話,那麼一個雜志類對應多個房間。放到表存儲的話,那麼這個類別欄位 就不是唯一的了。

非聚集索引:

非聚集索引,也可以從生活中找到映射。非聚集索引強調的是邏輯分類。可以說是定義了一套存儲規則,而需要有一塊控制項來維護這個規則,這個被稱之為索引表。

繼續使用上述提到的例子:

同學如果想去圖書館找一本書,而不知道這本書在哪裡?那麼這個同學首先應該找的就是 檢索室吧。對於要查找一本書來說,在檢索室查是一個非常快捷的的途徑了吧。但是,在檢索室中你查到了該書在XX室XX書架的信息。你的查詢結束了嗎?沒有吧。你僅僅找到了目的書的位置信息,你還要去該位置去取書。

對於這種方式來說,你需要兩個步驟:
1、查詢該記錄所在的位置。
2、通過該位置去取要找的記錄。

區別:

聚集索引:可以幫助把很大的范圍,迅速減小范圍。但是查找該記錄,就要從這個小范圍中Scan了。
非聚集索引:把一個很大的范圍,轉換成一個小的地圖。你需要在這個小地圖中找你要尋找的信息的位置。然後通過這個位置,再去找你所需要的記錄。
索引與主鍵的區別

主鍵:主鍵是唯一的,用於快速定位一條記錄。
聚集索引:聚集索引也是唯一的。(因為聚集索引的劃分依據是物理存儲)。而聚集索引的主要是為了快速的縮小查找范圍,即記錄數目未定。
主鍵和索引沒有關系。他們的用途相近。如果聚集索引加上唯一性約束之後,他們的作用就一樣了。
使用場景

基於上述的兩種規則,那麼在什麼時候適合聚集索引,什麼時候適合非聚集索引?

④ sqlserver中聚集索引的作用是什麼

聚集索引和非聚集索引的區別:
漢語字典的正文本身就是一個聚集索引。比如,我們要查「安」字,就會很自然地翻開字典的前幾頁,因為「安」的拼音是「an」,而按照拼音排序漢字的字典是以英文字母「a」開頭並以「z」結尾的,那麼「安」字就自然地排在字典的前部。如果您翻完了所有以「a」開頭的部分仍然找不到這個字,那麼就說明您的字典中沒有這個字;同樣的,如果查「張」字,那您也會將您的字典翻到最後部分,因為「張」的拼音是「zhang」。也就是說,字典的正文部分本身就是一個目錄,您不需要再去查其他目錄來找到您需要找的內容。正文內容本身就是一種按照一定規則排列的目錄稱為「聚集索引」。
如果您認識某個字,您可以快速地從自動中查到這個字。但您也可能會遇到您不認識的字,不知道它的發音,這時候,您就不能按照剛才的方法找到您要查的字,而需要去根據「偏旁部首」查到您要找的字,然後根據這個字後的頁碼直接翻到某頁來找到您要找的字。但您結合「部首目錄」和「檢字表」而查到的字的排序並不是真正的正文的排序方法,比如您查「張」字,我們可以看到在查部首之後的檢字表中「張」的頁碼是672頁,檢字表中「張」的上面是「馳」字,但頁碼卻是63頁,「張」的下面是「弩」字,頁面是390頁。很顯然,這些字並不是真正的分別位於「張」字的上下方,現在您看到的連續的「馳、張、弩」三字實際上就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我們可以通過這種方式來找到您所需要的字,但它需要兩個過程,先找到目錄中的結果,然後再翻到您所需要的頁碼。

我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為「非聚集索引」。

⑤ SQL Server 聚集索引和非聚集索引的區別分

聚集索引和非聚集索引的根本區別:
1、表記錄的排列順序和與索引的排列順序是否一致。
2、聚集索引一個表只有一個,非聚集索引一個表可以存在多個。
3、聚集索引存儲記錄是物理上連續存在,非聚集索引是邏輯上的連續。
聚集索引優點:
1、以最快的速度縮小查詢范圍。
2、以最快的速度進行欄位排序。
聚集索引使用場合:
1、此列包含有限數目的不同值。
2、查詢的結果返回一個區間的值。
3、查詢的結果返回某值相同的大量結果集。
非聚集索引優點:
1、非聚集索引比聚集索引層次多。
3、添加記錄不會引起數據順序的重組。
非聚集索引使用場合:
1、此列包含了大量數目不同的值。
2、查詢的結束返回的是少量的結果集。

⑥ 如何用sql語句在列上建立聚集索引

可以用如下語句
create clustered index 索引名 on 表名(欄位名)

⑦ SQL 中的聚集索引和非聚集索引 分別指的是什麼

聚集索引:其中行的物理排序與索引排序相同,並且聚集索引的最低一級(葉級)包含實際的數據行。一個表或視圖只允許同時有一個聚集索引。 在創建任何非聚集索引之前創建聚集索引。創建聚集索引時重建表上現有的非聚集索引。 如果沒有指定 CLUSTERED,則創建非聚集索引。 1、聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致,聚集索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,因為一旦具有第一個索引值的紀錄被找到,具有連續索引值的記錄也一定物理的緊跟其後。聚集索引的缺點是對表進行修改速度較慢,這是為了保持表中的記錄的物理順序與索引的順序一致,而把記錄插入到數據頁的相應位置,必須在數據頁中進行數據重排,降低了執行速度。建議使用聚集索引的場合為: a.此列包含有限數目的不同值; b.查詢的結果返回一個區間的值; c.查詢的結果返回某值相同的大量結果集。 非聚集索引指定了表中記錄的邏輯順序,但記錄的物理順序和索引的順序不一致,聚集索引和非聚集索引都採用了B+樹的結構,但非聚集索引的葉子層並不與實際的數據頁相重疊,而採用葉子層包含一個指向表中的記錄在數據頁中的指針的方式。非聚集索引比聚集索引層次多,添加記錄不會引起數據順序的重組。建議使用非聚集索引的場合為: a.此列包含了大量數目不同的值; b.查詢的結束返回的是少量的結果集; c.order by 子句中使用了該列。 2、聚集索引:其中行的物理排序與索引排序相同,並且聚集索引的最低一級(葉級)包含實際的數據行。一個表或視圖只允許同時有一個聚集索引。 在創建任何非聚集索引之前創建聚集索引。創建聚集索引時重建表上現有的非聚集索引。 如果沒有指定 CLUSTERED,則創建非聚集索引。 3、--不用索引查詢 SELECT * FROM IndexTestTable WHIT(INDEX(0)) WHERE Status= 'B ' --創建聚集索引

⑧ SQL中一個表可以有幾個聚集索引或非聚集索引

一個表只能有一個聚集索引,可以有多個非聚集索引

下面是聚集索引和非聚集索引的詳細介紹:
聚集索引基於數據行的鍵值在表內排序和存儲這些數據行。每個表只能有一個聚集索引,因為數據行本身只能按一個順序存儲。有關聚集索引體系結構的詳細信息,請參閱聚集索引結構。

每個表幾乎都對列定義聚集索引來實現下列功能:

可用於經常使用的查詢。

提供高度唯一性。

注意:

創建 PRIMARY KEY 約束時,將在列上自動創建唯一索引。默認情況下,此索引是聚集索引,但是在創建約束時,可以指定創建非聚集索引。

可用於范圍查詢。

如果未使用 UNIQUE 屬性創建聚集索引,資料庫引擎將向表自動添加一個 4 位元組的 uniqueifier
列。必要時,資料庫引擎將向行自動添加一個 uniqueifier 值以使每個鍵唯一。此列和列值供內部使用,用戶不能查看或訪問

查詢注意事項

在創建聚集索引之前,應先了解數據是如何被訪問的。考慮對具有以下特點的查詢使用聚集索引:

使用運算符(如 BETWEEN、>、>=、< 和
<=)返回一系列值。

使用聚集索引找到包含第一個值的行後,便可以確保包含後續索引值的行物理相鄰。例如,如果某個查詢在一系列銷售訂單號間檢索記錄,SalesOrderNumber
列的聚集索引可快速定位包含起始銷售訂單號的行,然後檢索表中所有連續的行,直到檢索到最後的銷售訂單號。

返回大型結果集。

使用 JOIN 子句;一般情況下,使用該子句的是外鍵列。

使用 ORDER BY 或 GROUP BY 子句。

在 ORDER BY 或 GROUP BY
子句中指定的列的索引,可以使資料庫引擎不必對數據進行排序,因為這些行已經排序。這樣可以提高查詢性能。

列注意事項

一般情況下,定義聚集索引鍵時使用的列越少越好。考慮具有下列一個或多個屬性的列:

唯一或包含許多不重復的值

例如,雇員 ID 唯一地標識雇員。EmployeeID 列的聚集索引或 PRIMARY KEY
約束將改善基於雇員 ID 號搜索雇員信息的查詢的性能。另外,可對
LastName、FirstName、MiddleName
列創建聚集索引,因為經常以這種方式分組和查詢雇員記錄,而且這些列的組合還可提供高區分度。

按順序被訪問

例如,產品 ID 唯一地標識 AdventureWorks2008R2 資料庫的
Proction.Proct 表中的產品。在其中指定順序搜索的查詢(如 WHERE ProctID BETWEEN 980
and 999)將從 ProctID 的聚集索引受益。這是因為行將按該鍵列的排序順序存儲。

由於保證了列在表中是唯一的,所以定義為 IDENTITY。

經常用於對表中檢索到的數據進行排序。

按該列對表進行聚集(即物理排序)是一個好方法,它可以在每次查詢該列時節省排序操作的成本。

聚集索引不適用於具有下列屬性的列:

頻繁更改的列

這將導致整行移動,因為資料庫引擎必須按物理順序保留行中的數據值。這一點要特別注意,因為在大容量事務處理系統中數據通常是可變的。

寬鍵

寬鍵是若干列或若干大型列的組合。所有非聚集索引將聚集索引中的鍵值用作查找鍵。為同一表定義的任何非聚集索引都將增大許多,這是因為非聚集索引項包含聚集鍵,同時也包含為此非聚集索引定義的鍵列。

索引選項

創建聚集索引時,可指定若干索引選項。因為聚集索引通常都很大,所以應特別注意下列選項:

SORT_IN_TEMPDB

DROP_EXISTING

FILLFACTOR

ONLINE

非聚集索引包含索引鍵值和指向表數據存儲位置的行定位器。有關非聚集索引體系結構的詳細信息,請參閱非聚集索引結構。

可以對表或索引視圖創建多個非聚集索引。通常,設計非聚集索引是為改善經常使用的、沒有建立聚集索引的查詢的性能。

與使用書中索引的方式相似,查詢優化器在搜索數據值時,先搜索非聚集索引以找到數據值在表中的位置,然後直接從該位置檢索數據。這使非聚集索引成為完全匹配查詢的最佳選擇,因為索引包含說明查詢所搜索的數據值在表中的精確位置的項。例如,為了從
Person.Person 表中查詢具有特定姓氏的人員,查詢優化器可能使用非聚集索引
IX_Person_LastName_FirstName_MiddleName;它以 LastName 作為自己的一個鍵列。查詢優化器能快速找出索引中與指定
LastName
匹配的所有項。每個索引項都指向表或聚集索引中准確的頁和行,其中可以找到相應的數據。在查詢優化器在索引中找到所有項之後,它可以直接轉到准確的頁和行進行數據檢索。

資料庫注意事項

設計非聚集索引時需要注意資料庫的特徵。

更新要求較低但包含大量數據的資料庫或表可以從許多非聚集索引中獲益從而改善查詢性能。與全表非聚集索引相比,考慮為定義完善的數據子集創建篩選索引可以提高查詢性能、降低索引存儲開銷並減少索引維護開銷。

決策支持系統應用程序和主要包含只讀數據的資料庫可以從許多非聚集索引中獲益。查詢優化器具有更多可供選擇的索引用來確定最快的訪問方法,並且資料庫的低更新特徵意味著索引維護不會降低性能。

聯機事務處理應用程序和包含大量更新表的資料庫應避免使用過多的索引。此外,索引應該是窄的,即列越少越好。

一個表如果建有大量索引會影響
INSERT、UPDATE、DELETE 和 MERGE
語句的性能,因為當表中的數據更改時,所有索引都須進行適當的調整。

查詢注意事項

在創建非聚集索引之前,應先了解訪問數據的方式。考慮對具有以下屬性的查詢使用非聚集索引:

使用 JOIN 或 GROUP BY
子句。

應為聯接和分組操作中所涉及的列創建多個非聚集索引,為任何外鍵列創建一個聚集索引。

不返回大型結果集的查詢。

創建篩選索引以覆蓋從大型表中返回定義完善的行子集的查詢。

包含經常包含在查詢的搜索條件(例如返回完全匹配的 WHERE 子句)中的列。

列注意事項

考慮具有以下一個或多個屬性的列:

覆蓋查詢。

當索引包含查詢中的所有列時,性能可以提升。查詢優化器可以找到索引內的所有列值;不會訪問表或聚集索引數據,這樣就減少了磁碟
I/O 操作。使用具有包含列的索引來添加覆蓋列,而不是創建寬索引鍵。有關詳細信息,請參閱
具有包含列的索引


如果表有聚集索引,則該聚集索引中定義的列將自動追加到表上每個非聚集索引的末端。這可以生成覆蓋查詢,而不用在非聚集索引定義中指定聚集索引列。例如,如果一個表在
C 列上有聚集索引,則 B 和 A 列的非聚集索引將具有其自己的鍵值列 B、A 和 C。

大量非重復值,如姓氏和名字的組合(前提是聚集索引被用於其他列)。

如果只有很少的非重復值,例如僅有 1 和
0,則大多數查詢將不使用索引,因為此時表掃描通常更有效。對於這種類型的數據,應考慮對僅出現在少數行中的非重復值創建篩選索引。例如,如果大部分值都是
0,則查詢優化器可以對包含 1 的數據行使用篩選查詢。

索引選項

在創建非聚集索引時,可以指定若干索引選項。要尤其注意以下選項:

FILLFACTOR

ONLINE

⑨ sql 什麼時候用聚集索引和非聚集索引

1 聚集索引:該索引中鍵值的邏輯順序決定了表中相應行的物理順序。
聚集索引確定表中數據的物理順序。聚集索引類似於電話簿,後者按姓氏排列數據。由於聚集索引規定數據在表中的物理存儲順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
2 聚集索引使用注意事項

定義聚集索引鍵時使用的列越少越好。
• 包含大量非重復值的列。
.• 使用下列運算符返回一個范圍值的查詢:BETWEEN、>、>=、< 和 <=。
• 被連續訪問的列。
• 回大型結果集的查詢。
• 經常被使用聯接或 GROUP BY 子句的查詢訪問的列;一般來說,這些是外鍵列。對 ORDER BY 或
GROUP BY 子句中指定的列進行索引,可以使 SQL Server 不必對數據進行排序,因為這些行已經排序。這樣可以提高查詢性能。
• OLTP 類型的應用程序,這些程序要求進行非常快速的單行查找(一般通過主鍵)。應在主鍵上創建聚集索引。
3 聚集索引不適用於:

• 頻繁更改的列 。這將導致整行移動(因為 SQL Server
必須按物理順序保留行中的數據值)。這一點要特別注意,因為在大數據量事務處理系統中數據是易失的。
• 寬鍵 。來自聚集索引的鍵值由所有非聚集索引作為查找鍵使用,因此存儲在每個非聚集索引的葉條目內。
4 非聚集索引:數據存儲在一個地方,索引存儲在另一個地方,索引帶有指針指向數據的存儲位置。

非聚集索引中的項目按索引鍵值的順序存儲,而表中的信息按另一種順序存儲(這可以由聚集索引規定)。對於非聚集索引,可以為在表非聚集索引中查找數據時常
用的每個列創建一個非聚集索引。有些書籍包含多個索引。例如,一本介紹園藝的書可能會包含一個植物通俗名稱索引,和一個植物學名索引

⑩ SQL:怎麼把非聚集索引變成聚集索引

一個表只能有一個聚集索引,所以如果你已經有了一個,就不能在建一個。
如果只有一個,那你可以通過alert table來修改,把nonclustered改為clustered就可以。

熱點內容
櫻花伺服器測試ip 發布:2024-09-20 20:10:39 瀏覽:279
爐石傳說安卓怎麼玩 發布:2024-09-20 20:09:59 瀏覽:312
ios開會員為什麼比安卓貴 發布:2024-09-20 20:09:55 瀏覽:568
緩存伺服器redis 發布:2024-09-20 20:09:01 瀏覽:75
優酷上傳ts 發布:2024-09-20 19:55:58 瀏覽:273
minecraft怎麼開伺服器地址 發布:2024-09-20 19:52:14 瀏覽:651
android彈出布局 發布:2024-09-20 19:14:29 瀏覽:981
預演算法包括 發布:2024-09-20 18:52:07 瀏覽:764
什麼數字後面跟著密碼 發布:2024-09-20 18:52:07 瀏覽:878
訂座源碼 發布:2024-09-20 18:52:06 瀏覽:383