3

我已经使用 SQL 大约 2 年了,它一直在我的脑海中。

最佳实践说将列的长度分配给您所期望的

SQL 想要一个专用的特定行作为主键,但它也是 A_i 字段的最佳实践......但是分配它的长度是多少?如果留空,则默认为11,表示999,999,999

这看起来不错,但最佳实践也声明永远不要从数据库中真正清除任何内容;只需附加一个 0 或 1 来表示已删除,这是出于存档/恢复目的.. 也可用于审核用户想要清除的内容..

举个例子:

我有一个已经存在多年的网站,遵循不从数据库中删除任何内容的最佳实践;我的数据库/网站流量非常大,每天有大量的独立用户/访问者。

现在,如果我保留 SQL 默认长度 11,如果我的表达到最大长度,然后另一个用户决定注册,会发生什么?它会抛出一个错误并且不会继续,这会给新用户带来少量的停机时间,原因是数据库管理员必须登录到 SQL 并更改长度。这并不费力,但确实如此在早期开发过程中可以避免的努力..


我所做的,当创建一个表时给出一个255的长度,在我的脑海里,有些东西告诉我“这不是好的做法”,但它避免了上述示例的非常微小的可能性。

与没有指定长度的字段相比text,为什么就 A_I 字段而言不能相同。

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


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


总体:

总的来说,我想问的是什么;A_I 字段的理想长度是多少?如果它最大化长度但同时牢记最佳实践,以最大限度地减少抛出错误的微小风险。

4

2 回答 2

4

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

int(11) .. 最多存储 99,999,999,999。
它最多只能存储 2,147,483,647。

如果将其设置为无符号,
则它可以允许 4,294,967,295 条记录(40 亿!)

Facebook 的用户刚刚超过 10 亿!
所以,我不认为任何人都可以很快拥有 4 倍的用户群......

本文很好地解释了几个最佳实践:

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

  1. 较小的列速度更快
  2. integer 是固定长度,但 varchar 不是固定长度
  3. 为连接建立索引并使用相同的列类型
于 2013-04-06T21:43:56.343 回答
1

分析您的应用程序或系统。估计每天有多少用户注册?每年?一旦你知道了这一点,然后决定你想要有多“安全” - 就你希望系统运行多少年而不需要修改它而言。假设 100 年就足够了……因此,将年度用户注册的预期数量乘以 100,并确保 PK 足够大以容纳那么多值。

于 2013-04-06T21:26:03.953 回答