正如问题所述,使用NewSequentialID作为表的默认值与NewID()的缺点是什么?显而易见的优势是它不会像我们的索引一样碎片化。使用NewSequentialID有什么缺点吗?
是否有任何关于永远最大化序列的问题?
正如问题所述,使用NewSequentialID作为表的默认值与NewID()的缺点是什么?显而易见的优势是它不会像我们的索引一样碎片化。使用NewSequentialID有什么缺点吗?
是否有任何关于永远最大化序列的问题?
我不明白一个字段的默认值如何真的成为一个缺点。
如果您想在插入某些记录之前控制某些记录的ID,可以使用NEWID()
而非默认的顺序ID(因此您可以在与数据库交互之前生成记录及其关联),以及您将不必在以后查询它以获取ID)。虽然两者并不相互排斥......
由于granadaCoder说,顺序编号可以推断,但IMO的好处是在性能和维护长期如此之大,这将是一个错误,不要使用它。
你可以使用UuidCreateSequential来模拟“客户端”“顺序”标识符。正如Thomas所说,guid的好处在于你可以“联系”所有关联运送到数据库..... aka,您不必等待IDENTITY列返回它们的值以插入子(FK)记录。但是(如aaron-b所述)存在一些缺点。做出明智的选择。 – granadaCoder
很好的支持,一,它仍然比,比方说,一个INT一个很宽的关键。而且你失去了价值相对随机且不可预测的魅力之一。您有利于使用GUID(无论是否存在碎片),您有哪些优势? –
如果您已经意识到int/big_int与GUID参数.....使用NewSequentialID的唯一“缺点”是某人可能会猜到一个GUID。就像,如果你有一个web应用说/EmployeeEdit.aspx?EmployeeKey=123,你的最终用户可能会“猜到”/EmployeeEdit.aspx?EmployeeKey=124。使用NewSequentialID ... – granadaCoder
可以完成同样的事情。另一个主要优点是,您可以通过创建日期获得可靠性排序(如果这对您很重要),即使使用CreateDate列,您也可能无法获得可靠性排序。 –