我正在處理一個數據庫,在我通過保存和檢索已知GUID添加記錄後,檢索我的記錄的ID。我的應用程序在SQL Server和Oracle上運行,所以我不能使用@@ IDENTITY *。用於更新表的GUID列 - 是否應該編入索引?
說,例如,我添加了一個新的地址:
ID (identity column in SQL Server;sequenced/trigger column in Oracle)
... address data... (street, town, postcode, etc.)
GUID
我得到的ID後面通過執行以下操作:
1. INSERT INTO ADDRESS (... address details, GUID = {some new GUID value})
2. SELECT ID FROM ADDRESS WHERE GUID = {my GUID value}
3. UPDATE ADDRESS SET GUID = NULL WHERE GUID = {my GUID value}
在第1部分,我添加的詳細地址和在數據庫中設置GUID值;在第2部分中,我得到了自己的ID,在第3部分中,我從數據庫中刪除了GUID值(以避免極少發生重複GUID的事件)。
當我看到第三位的SQL Server 2008的估計的執行計劃,它顯示了以下路徑,如果我對GUID列上沒有索引:
,如果我下面的路徑對GUID列的索引:
我的問題是:我認識到,第一個圖像顯示的掃描是不如的第二圖像中顯示查找,但如果GUID列基本上是空的,那麼99.999%的時間意味着我不應該對該字段進行索引,因爲它始終是分段的並會浪費資源?或者索引仍然有幫助,因爲它可以很容易地向我顯示我剛剛添加的唯一GUID的位置,而不必對其進行全面掃描。
總結:鑑於GUID被添加並立即刪除的事實,是否有索引GUID列的任何一點?
*事實上,設計不是我自己的,所以我無法使用不同的方法;但是,您應該看到我的特定數據庫的設計不會影響我的整體問題。
在SQL中,您可以使用NEWID來選擇一個新的不同的GUID。 NEWID和索引有問題,因爲NEWID是隨機的,所以它可以出現在索引的二叉樹的任何位置。 http://msdn.microsoft.com/en-us/library/ms190348.aspx – David
什麼是你使用這種技術接收身份列值?在MS SQL中,我也相信Oracle有更方便快捷的方式來獲取ID。使用存儲過程添加不同的技術用於Oracle和MS SQL – elevener