Sql-Server
唯一的非聚集索引是否有助於鎖定?
我想知道當涉及到 KEY 鎖時,SQL Server 使用唯一非聚集索引與非唯一聚集索引的行為是否不同。
理論上可以,實際上不行。
如果 SQL Server 可以保證一個欄位是唯一的,那麼它可以以不同的方式建構執行計劃。Rob Farley 用 AdventureWorks 寫了一個範例,其中唯一索引甚至沒有顯示在執行計劃中,但它的存在讓 SQL Server 建構了一個更好的計劃。
如果您的數據確實符合唯一索引的條件,那麼將其指定為唯一將確保 SQL Server 在您搜尋一個值時始終估計返回 1 行。這意味著您更有可能獲得更細粒度的鎖而不是表鎖。
但是,如果您擔心鎖升級,那可能是因為您不是在尋找平等。您正在加入其他表,或使用範圍搜尋。在這些情況下,索引的唯一性不會拯救你。