标识列的Int32限制

时间:2012-08-22 23:37:44

标签: c# .net sql-server identity-column type-conversion

这只是我创建的网站和其他大型网站的考虑因素。

我正在使用Identity Column存储我的一些表的ID,并且我的Id用Int32修饰的类来保存从数据库中检索的ID的值。

我担心的是,随着网站变得越来越大,一些指数增长的表格QuestionComments将来可能超过Int32限制。所以我将课程改为使用long

public class Question
{
   public long QuestionID { get; set; }
   ...
}

//将数据库值转换为.Net类型

 Question q = new Question();
 q.QuestionID = Convert.ToInt32(myDataRow["QuestionID"]);

我的假设有多正确?使用UniqueIdentifier会更好吗?还有其他方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

您能想象为任何一个实体存储数十亿条记录吗?如果是这样,您可以切换到BigInt,也称为Int64。当然,一旦您开始看到数百万条记录,您就需要开始考虑数据分区和归档,以避免严重的性能问题。如果您有基础架构团队,您可能希望让他们知道您预计会有大量使用,并且需要一个严格的维护计划。如果您是基础设施团队,那么您最好打书!

答案 1 :(得分:2)

如果你真的认为你的评论超过20亿是合理的,那么在SQL Server中使用BIGINT(.Net中为Int64)。对于INT,这需要8个字节的存储而不是4个字节,但是如果使用数据压缩,则可以将此值偏移为前2个十亿个值。