我们有一个数据库,其中所有的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