2013-04-06 60 views
1

我一直在使用SQL约2年,现在一直都在我的脑海。为什么指定自动增量ID的长度

最佳实践说柱的长度分配给你是什么 期待

的SQL想要一个特定的行专门作为主键,但它也是最佳实践的A_I场.. 。但分配的长度是多少?如果留空,则默认为,它代表999,999,999

这似乎不错,但是最佳实践也说明从数据库中从来没有真正明确的东西;只是追加一个0或1来表示删除了,这是存档/恢复的目的。也可用于用户想要清除..什么审计

拿这个例子:

我有一个网站是多年来一直遵循的最佳做法,不从数据库中删除任何东西;我的数据库/网站流量非常繁重,每天都有大量独特的用户/访问者。

现在,如果我保留SQL默认长度为11,如果我的表达到最大长度,然后另一个用户决定注册,会发生什么?它会抛出一个错误,而不会继续,这将导致新用户的宕机时间很少,原因是数据库管理员将不得不登录到SQL并更改长度。哪个不是很大的努力,但它是努力可在早期发展过程中应避免..


我做什么,创建表时是给出这在我的脑海里,东西是告诉我的长度“,这不是良好的做法“,但它避免了上述例子的极小可能性。

当与没有指定长度的text字段进行比较时,为什么不能在A_I字段方面相同。

不要误解我的意思,我完全理解可用的数据类型。


我已经通过google和so进行了大量的研究,但结果指出了有关改变表格以增加当前长度的问题。这不是我要求的。


总评:

所以,总体来说,我试图问; A_I领域的理想长度是多少?尽量减少抛出错误的细微风险,如果它最大限度地缩短了错误长度,还要记住最佳实践。

+0

您使用的是哪种数据库产品? – 2013-04-06 21:19:48

+0

@CharlesBretana对不起,应该有标签。我使用的是基于Linux/Unix的MySQL – 2013-04-06 21:20:19

回答

1

原因很简单,
作为主键,该ID应该很适合您的期望。
如果指定varchar,则缺点是索引上的大小较大,可能会降低读取和写入性能。

int(11)..不会存储高达99,999,999,999。
它只能存储高达2,147,483,647。

如果你将它设置为无符号,
那么它可以允许的记录4,294,967,295(4十亿!)

Facebook的刚刚超过十亿用户的好评!
所以,我逼债看到任何人都可以拥有4时更大的用户群很快...

的最佳实践夫妇已在这篇文章中已经解释得非常好:

http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/

  1. 较小的列更快
  2. 整数是固定长度,但varchar不是固定长度
  3. 索引和用法连接的相同列类型
+0

我是在假设长度是多少时间的数量可以? – 2013-04-06 21:46:05

+0

不,你可以参考这里:http://dev.mysql.com/doc/refman/5.0/en/integer-types.html – ajreal 2013-04-06 21:48:03

+0

得到亚,感谢您的时间我的朋友 – 2013-04-06 22:09:57

1

分析您的应用程序或系统。估计每天有多少用户注册?每年?一旦你知道这一点,然后决定你想成为多么“安全” - 就你希望系统运行多少年而言,无需修改它。假设100年已经足够了......所以,将年度用户注册的预期数量乘以100,并确保PK足够大,可以同时达到许多值。

+0

这是完全可以理解的,所以你说什么是在完成产品上运行一些基准测试并在基准测试过程发生后计算期望值? – 2013-04-06 21:30:29

+1

排序,除了我希望你应该知道这些问题的答案(关于系统的预计使用情况)肯定在一个数量级内,而不必运行任何基准测试。此外,前几周的实际使用模式可能无法准确反映您在第一年或前五年所经历的情况......您现在应该有一个好主意。采取这种估计,并乘以十,(或100),并使用它。这应该足够安全。你不需要做的就是让它足够大到可以持续1000万年 – 2013-04-06 22:04:59

+0

在某种程度上,很容易在网站上有个人期望;但上市时你的期望会被超过,或需要一段时间才能达到预期。我总体的目标是在指定长度上拥有一个“安全”基础。但是下面的答案指出了一些我不知道开始的事情。谢谢你的时间,虽然 – 2013-04-06 22:09:28