如果我在SQL Server數據庫上使用nvarchar(n)列作爲聚簇索引,那麼與數字(int)索引相比,我會遭受顯着的性能下降嗎?另外複合指標的表現如何比較?非數字索引的性能
非數字索引的性能
回答
Sql並不在意你的索引是否是數字,但有些事情需要考慮,具體取決於列中的內容以及你如何使用表格。
一般來說,你要保持你的指標儘可能的小,從而爲nvarchar(4000)(8000個高達字節)那真是糟透了。但一個varchar(3)(3個高達字節)會比INT(4個字節)的情況。你也想(在可能的情況下)將你的索引插入插入到索引的末尾,這樣會導致索引分裂並導致性能問題。
如果您針對該表運行的查詢僅包含索引中的列,則化合物索引可以大大提高性能。這意味着當索引滿足查詢時,實際表格甚至不會被觸及。
有關索引的概述,請參閱Sql server index basics。
如果您提供關於表本身的更多具體細節以及如何使用它,可能會更有幫助?
幾乎可以肯定是的。
狹窄,數字和嚴格單調是一個很好的聚集鍵。 nvarchar不是這些。
每個非聚集索引條目引用聚集索引,因此您也會膨脹NC索引。
這是整理/比較問題之前。
我認爲這也取決於你的表的大小。對於較小的表格,我懷疑你會注意到一個區別,但對於較大的表格,說100萬行甚至更多,你可能會看到nvarchar的輕微放緩。我會說這也依賴於什麼領域實際contains..i.e,是他們的電子郵件等
科林,
爲nvarchar使用VARCHAR列兩倍的空間。如果nvarchar列是表上唯一的索引,那麼命中可能不那麼多,但如果在該表上還有非聚簇索引,那麼是的,你將會有性能問題。這是因爲聚簇索引也包含在非聚簇索引的所有行中,並且非聚簇索引將非常寬。另一方面,int列只佔用4個字節,並具有很大的範圍以存儲從-2,147,483,648到2,147,483,647的值,並且往往是窄的。對於4個字節,nvarchar列最多隻能存儲varchar(2)使用的空間,因爲它使用varchar列的空間的兩倍。你看到你有多少空間浪費?
在談論索引時,必須將「性能」分爲兩個主題。比非集羣聚集索引更是這樣,因爲它可能要在底層數據存儲遷移數據 -
在插入,更新和刪除,該指數將減緩你的數據庫了。在這裏,我同意John的說法,順序int將比nvarchar更好。
但是,如果你需要反正在爲nvarchar現場查詢,在該領域的聚簇索引將更加加快你的閱讀。
所以你的問題的答案真的取決於你是否擔心插入或讀取性能。
- 1. MongoDB的索引和非索引性能
- 2. 非數字索引數組的長度?
- 3. 非整數索引的索引屬性在C#
- 4. Matlab中非數字元素的索引
- 5. JavaScript in_array()函數非數字索引
- 6. mysql索引性能
- 7. Lucene索引性能
- 8. Solr索引性能
- 9. mongodb搜索索引性能
- 10. 集羣索引列上的非集羣索引可提高性能?
- 11. 找到一個非數字索引值
- 12. PHP:Array_unshift一個非數字索引
- 13. SqlDataReader的索引性能
- 14. 創建索引的性能
- 15. solr的索引性能
- 16. 不同列類型上的非聚簇索引的性能
- 17. 索引/非索引屬性的通用屬性路徑檢索器
- 18. Array中的非索引屬性
- 19. 提高非聚集索引查詢的性能
- 20. 非常重要的SQL性能查詢 - 建立索引
- 21. 非集羣索引表上的性能問題
- 22. 熊貓非獨特索引對性能的影響是什麼?
- 23. 更新聲明中的非聚集索引性能影響
- 24. SQL Server性能:非聚簇索引+ INCLUDE列與聚簇索引 - 等效嗎?
- 25. 非文字搜索能否從搜索引擎中受益?
- 26. 在索引列性能上使用字符串函數的SQL
- 27. MySQL的搜索和索引性能
- 28. 在已有聚簇索引的字段上放置非聚簇索引時,性能是否會提高?
- 29. MySQL數據庫索引性能問題
- 30. 非索引字段上的「default-like」屬性
該死的,我想補充一點。 +1 – gbn 2009-05-22 14:10:34