我知道聚集索引和非聚集索引之間的主要區別,並瞭解它們的實際工作方式。我瞭解聚簇和非聚簇索引如何提高讀取性能。但有一點我不確定的是,我會選擇哪一個的原因是什麼。SQL Server - 何時使用羣集與非羣集索引?
例如:如果一個表沒有聚集索引,應在創建一個非聚集索引和什麼做
我知道聚集索引和非聚集索引之間的主要區別,並瞭解它們的實際工作方式。我瞭解聚簇和非聚簇索引如何提高讀取性能。但有一點我不確定的是,我會選擇哪一個的原因是什麼。SQL Server - 何時使用羣集與非羣集索引?
例如:如果一個表沒有聚集索引,應在創建一個非聚集索引和什麼做
的好處我只是想提出警告的一句話:請非常小心挑選你的聚集索引!每個「常規」數據表都應該有一個聚簇索引,因爲聚簇索引確實可以加速很多操作 - 是的,加速,甚至可以插入和刪除!但只有當你選擇一個好的聚集索引。
這是最複製您的SQL Server數據庫中的數據結構。羣集密鑰也將成爲表格中每個非聚簇索引的一部分。
採摘聚集關鍵字時,您要特別小心 - 它應該是:
窄(4個字節理想)
獨特(它的 「行指針」 後,如果你沒有使它獨特,SQL Server會在後臺爲你做這件事,每個條目花費你幾個字節乘以你所擁有的行數和非聚集索引的數量 - 這可能是非常昂貴的! )
靜態(永遠不會改變 - 如果可能的話)
理想不斷增加所以你不會有可怕的索引碎片落得(一個GUID是一個很好的聚集鍵的完全相反 - 爲那個特別的原因)
應該非空的,理想也是固定的寬度 - 一個varchar(250)
使得一個非常貧窮的聚集鍵
別的真的應該是這些分落後重要的第二和第三級....
見一些金佰利特里普的(索引女王)博客上的這篇文章 - 任何她寫在她的博客絕對是無價的 - 閱讀它,消化它 - 靠它活着!
感謝marc_s的明確解釋。但從技術上講,「非羣集」指數對我們有什麼作用。它的重要性是什麼? – BNN
@nad:精心挑選的非聚集索引可以加快搜索速度,而不必將數百萬行數據與您的搜索條件進行比較,只需4,5次比較即可找到給定的行。這使***巨大的差異! –
@marc_s爲什麼它會加速插入的性能? – MuriloKunze
感謝響應。我已經意識到這一點。我的問題是,創建非聚集索引會比創建聚集索引有更多好處 – armulator
是的,你應該避免聚集索引;該列具有較低的基數,沒有特定的順序,經常更新,無序,它是許多列的組合... –
感謝您的回答。它的幫助 – armulator