如果我正試圖擠出查詢中最後一滴性能,那麼影響是否會讓我的連接使用這些類型的索引。SQL Server:索引的類型如何影響連接的性能?
- 聚集索引。
- 非聚集索引。
- 聚集索引或非聚集索引,其中可能沒有涉及到連接的額外列。
如果我經歷並創建只包含我的連接中所涉及的列的聚集索引,並且沒有其他任何東西,我會獲得任何性能嗎?
(我知道我可能要聚集索引從另一指標移動(使該指數非羣集),因爲它只能有一個。)
如果我正試圖擠出查詢中最後一滴性能,那麼影響是否會讓我的連接使用這些類型的索引。SQL Server:索引的類型如何影響連接的性能?
如果我經歷並創建只包含我的連接中所涉及的列的聚集索引,並且沒有其他任何東西,我會獲得任何性能嗎?
(我知道我可能要聚集索引從另一指標移動(使該指數非羣集),因爲它只能有一個。)
我會獲得任何性能,如果我去通過,並創建聚簇索引的僅包含參與我的加入,並沒有其他的列?
不是我所理解的。聚集索引的一點是,它然後將磁盤上的數據按照該索引進行排序(因此爲什麼只能有這個索引),所以如果您的連接數據沒有按照確切的列進行排序,我不會認爲它會有所作爲。另外,通過將可能會改變的數據(與密鑰相對)放入聚簇索引中,可能會導致事情需要進行週期性重建,從而降低整體數據庫的速度。
對不起,如果這聽起來很愚蠢的問題,但你有沒有嘗試通過索引調整嚮導運行你的查詢?任何時候都不是萬無一失,但過去我已經有了一些體面的改進。
你只有一個聚集索引 - 這是控制磁盤/內存中的表的物理存儲。
非聚簇索引重複包含的字段,指針指向具有該值的行。對連接中使用的列有一個索引應該可以提高性能。您可以通過在索引中使用「包含列」進一步優化 - 這會將行信息直接複製到索引中,這可以消除必須查找行本身才能執行選擇的性能損失。
注意發生連接的順序非常有用 - 索引中的列順序應該與此匹配。請記住,SQL引擎可能在內部優化和重新排序查詢 - 分析可能會有所幫助。
在大多數情況下,您可以使用數據庫引擎優化顧問 - 它提供的建議非常重要。
如果你可以最好的選擇是非聚集索引,它包含了你的所有連接元素,如果可能的話,你選擇的是這個字段。
這將創建一個生成索引,這意味着SQL需要執行的所有字段都在一個索引上。
如果可能的話,有一個索引沒有unnessasery字段。添加的每個字段都會使單個索引記錄變大,每個索引記錄越小,您在每個頁面中獲得的記錄越多。您在每個頁面中獲得的索引項越多,您必須轉到磁盤的次數越少。
聚集索引 - 將意味着在索引指定的順序奠定了桌子上,這意味着你會得到更好的性能SELECT * FROM表,其中INDEXFIELD = 3,除非你選擇很多大數據這不應該是必需的項目。
除了加雷掃羅的回答一個小小的澄清:
非聚集索引重複 包含的字段,與指針 行具有該值。
這個指向實際數據值的指針是你的集羣關鍵字中的列(或列集合)。
這就是爲什麼你應該儘量保持聚類密鑰小而靜的主要原因之一 - 小,否則你會浪費大量的空間,在磁盤和服務器的RAM中,而且是靜態的,因爲否則,如果你的值發生了變化,你不僅需要更新你的聚類索引,還要更新你所有的非聚簇索引。
這種「查找指針是聚集鍵」功能已經在SQL Server自7版本,Kim Tripp will explain in great detail here:
什麼是聚集索引?
在SQL Server 7.0及更高版本中 內部依賴關係 集羣關鍵字CHANGED。 (是的,這是 重要的是要知道的事情在7.0 CHANGED ......爲什麼呢?因爲還有 一些人在那裏,不 意識到多麼激進的改變 發生在內部(WRT到 集羣鍵)在SQL Server 7.0中)。
改變之處在於聚簇 鍵被用作來自非聚簇索引的「查找」值 。
感謝您的澄清 - 我認爲索引引用是內部引用,與所使用的集羣密鑰無關。很好學習新的東西! – 2010-01-13 14:44:53
在CL表上處理NC索引時正確,但Heap上的NC索引仍然使用非易失性行ID,然後該表使用轉發指針進行記錄移動。 (這是特定於最新版本的SQL,2005/2008,而不是以前的版本) – Andrew 2010-01-13 14:47:33
@Andrew:是的,但幾乎沒有一個好的理由**不**有一個聚集索引 - 所以它可能是最有可能的情況。據我所知,這是在SQL Server 7及以上 - 不只是2005年及以上。請參閱Kim Tripp的博客文章,她提到了這一點:http://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx – 2010-01-13 14:49:57
讓表格定義和你試圖做的連接將會很有幫助。名字並不重要,但你要加入的領域,你選擇的領域和表中每個領域的大小都會影響答案。 – 2010-01-13 14:19:21
我正在尋找一般答案。該查詢是非常具體的,並針對一個非常規的數據庫。但我會在下面作爲回答發佈。 – ctrlShiftBryan 2010-01-13 14:59:22