如果我在 SQL Server 表中有一個資料輸入字段,我可以有效地對其建立索引嗎?

如果我在 SQL Server 表中有一個資料輸入字段,我可以有效地對其建立索引嗎?

我有一個後端 SQL Server 資料庫。據我了解,聚集索引是最有效的,但它們對頁面進行物理排序以使其高效。因此,如果它是使用者輸入的字段,則每次新增記錄時,整個表格都需要自行重組。

這不可能有效率。那麼,在這種情況下,在欄位上放置常規索引是否有效?或者您會將其保留為未索引?

答案1

作為一般規則,您應該只對身分欄位真正使用聚集索引,並且自動編號是最好的,因為它們不斷增加。更新標識列是您應該每千年執行一次的操作,當然不是在應用程式運行時執行,因此您永遠不必透過標準 DML 語句對頁面內容重新排序。

在這些約束下,聚集索引非常高效,但正如您所指出的,如果使用不當,它們可能會嚴重拖累索引欄位上的 DML 語句的效能。

所以簡短的回答是,不要對使用者輸入的欄位使用聚集索引。

至於非聚集索引,它們可能是一個主要的好處,也可能是警告,這取決於它們的用途。 NCI 非常適合檢索一行或少量行,但索引的大小會隨著添加到索引中的每個字段而增長,因此複雜的多字段索引,或者只能將查詢解析為大量行的索引至少不能提供收益,而且往往會帶來比其價值更多的拖累。

相關內容