我們有一個數據庫,其中所有的PK都是GUID,大多數PK也是表的聚集索引。我們知道這是不好的(由於GUID的隨機性)。所以,看起來這裏基本上有兩種選擇(儘量不要把GUID全部扔出去,這是我們不能做的(至少現在不行))。具有羣集GUID PK的SQL Server數據庫 - 切換聚簇索引或切換到順序(梳)GUID?
- 我們可以將GUID生成算法改爲例如NHibernate使用的那個,詳見this post或
- 對於處於最重用途的表,我們可以改變爲不同的聚集索引,例如,一個IDENTITY列,並將「隨機」GUID保留爲PK。
在這種情況下是否可以給出任何一般性建議?
有問題的應用程序有500多個表格,最大的一個目前大約有一百五十萬行,幾個表格大約有五十萬行,其餘大大低於大多數(大部分遠低於10K)。
此外,該應用程序已安裝在多個客戶站點,因此我們必須考慮現有客戶的任何可能的負面影響。
謝謝!
謝謝你的回答。簡單的評論/澄清:我不關心GUID的可猜測性,只關心它們在整個安裝過程中的獨特性。 – Eyvind 2010-04-09 09:17:07
然後,只需將您的guid更改爲像SQLSEQ中的NEWSEQUENTIALID()這樣的連續GUID,就可以解決大部分即時問題。但是,不要將完全重新考慮因素放入身份中,而不能超過必要時間。 – 2010-04-09 09:26:17
因此,考慮到我們選擇了連續的GUID:對於在許多表格中有100K行的客戶呢?這樣的改變會使他們受益,還是情況會和今天一樣糟糕,因爲表格和索引已經是充滿「隨機」數據? – Eyvind 2010-04-09 10:51:59