SQL Server中的Insert/Update/Delete語句應使用哪種類型的索引(clustered/non clustrered)。我知道它會產生額外的開銷,但與非聚集索引相比,性能會更好嗎?還應該使用哪種索引用於SQL Server中的Select語句?集羣索引
集羣索引
回答
我不太清楚你的意思是「應該用於插入/更新/刪除語句」,但在我看來,每個表都應該有一個聚集索引。聚集索引指定數據實際存儲的順序。 如果未定義聚簇索引,則數據將被簡單地存儲在堆中。 如果你沒有一個自然的列作爲你的聚集索引,你總是可以像這樣創建一個標識列作爲int或bigint。
CREATE TABLE [dbo].[demo](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nchar](10) NULL,
[LastName] [nchar](10) NULL,
[Job] [nchar](10) NULL,
CONSTRAINT [PK_demo] PRIMARY KEY CLUSTERED
(
[ID] ASC
))
不是100%肯定你期望聽到的東西 - 你永遠只能有一個表上的單一聚簇索引,默認情況下,每個表(除了極少數邊緣情況例外)應該有一個。所有的指數通常會幫助你的選擇最多,有些傾向於傷害插入,刪除和可能的更新(或很多,如果選擇不好)。
聚簇索引使得每個操作的表更快。是!它的確如此。有關背景信息,請參閱Kim Tripp出色的The Clustered Index Debate continues。她還提到她的主要標準,一個聚集索引:
- 窄
- 靜態(永遠不會改變)
- 獨特
- 如果有的話可能:不斷增加的
INT IDENTITY滿足這個完美 - GUID不。有關廣泛的背景信息,請參閱GUID's as Primary Key。
爲什麼縮小?因爲聚簇鍵被添加到同一個表上的每個非聚簇索引的每個索引頁(爲了能夠實際查找數據行,如果需要的話)。您不想在您的羣集密鑰中包含VARCHAR(200)....
爲什麼獨特?請參閱上文 - 集羣密鑰是SQL Server用來唯一地查找數據行的項目和機制。它必須是獨一無二的。如果您選擇一個非唯一集羣密鑰,SQL Server本身會爲您的密鑰添加一個4字節的唯一標識符。小心點!
下一個:非聚集索引。基本上有一條規則:引用另一個表的子表中的任何外鍵都應該被索引,這會加快JOIN和其他操作。此外,任何具有WHERE子句的查詢都是很好的候選者 - 挑選那些首先執行很多的查詢。在ORDER BY語句中,將索引放在WHERE子句中顯示的列上。
下一步:測量您的系統,檢查DMV(動態管理視圖)中關於未使用或缺失索引的提示,並一遍又一遍地調整系統。這是一個持續的過程,你永遠不會做!
警告的另一個詞:使用一整套索引,可以使任何SELECT查詢變得非常快速。但與此同時,必須更新涉及的所有索引的INSERT,UPDATE和DELETE可能會受到影響。如果你只有選擇 - 堅果!否則,這是一種精緻而微妙的平衡行爲。你可以隨時調整一個單一的查詢 - 但你的系統的其他部分可能會因此而受到影響。不要過度索引你的數據庫!放入一些好的指標,檢查並觀察系統的行爲,然後再添加一個或兩個:觀察整個系統性能如何受到影響。
+1好帖子。謝謝。 – Rahul 2011-11-08 14:22:24
- 1. 集羣索引SQL Server
- 2. splunk搜索頭集羣加入索引器集羣
- 3. 彈性搜索 - 從集羣導出索引到不同集羣
- 4. 通過羣集或非聚集索引
- 5. 集羣索引列上的非集羣索引可提高性能?
- 6. 涵蓋索引與集羣索引(數據庫索引)
- 7. 實體框架多對多羣集與非羣集索引
- 8. 是Oracle中的索引集羣還是非集羣?
- 9. SQL Server:將羣集主索引更改爲非羣集
- 10. AWS JAVA ElasticsearchClient集羣和索引查找
- 11. 停止羣集索引腳本
- 12. 集羣或唯一索引MySql DB?
- 13. 多租戶羣集索引設計
- 14. 多個集羣索引效應
- 15. 發票項目表集羣索引表
- 16. SQL Server 2008中的羣集索引
- 17. SQL Server中的羣集索引
- 18. SQL Server非集羣索引 - 包含值
- 19. SQL Server - 分區表與集羣索引?
- 20. 在infinispan lucene索引中清除集羣
- 21. 集羣索引掃描與索引查找
- 22. 按集羣式列存儲索引中的索引排序
- 23. SQL索引問題:爲什麼SQL Server更喜歡這個非集羣索引到一個集羣?
- 24. 我很困惑在我的分區中使用集羣和非集羣索引
- 25. 什麼是列存儲索引以及如何從集羣和非集羣
- 26. 使用羣集與非羣集索引上的大數據在SQL
- 27. 彈性搜索羣集
- 28. 更新表後列的集羣索引片段
- 29. 單個表上的羣集,索引和分區
- 30. 集羣索引更新來自遊標問題
你讀過這個問題:http://stackoverflow.com/questions/91688/what-are-the-differencespros-cons-between-clustered-and-non-clustered-indexes? – 2010-04-23 20:47:36