【问题标题】:Recommended SQL Types and Lengths推荐的 SQL 类型和长度
【发布时间】:2011-07-21 04:58:21
【问题描述】:

我是 SQL 新手,我正在处理一个存储多人游戏帐户信息的表。我想知道存储大量数据的最有效方法是什么。

对于这三个专栏,我想,我已经想通了:

username: VARCHAR(20)
password: VARBINARY(16) for MD5-Hashes
email: VARCHAR(70)

您对此有何看法?

除此之外,还会有很多更灵活的数据(游戏存档数据),这是我无法真正预测的。将此数据作为 XML 数据保存在 TEXT 类型的字段中是否明智?还是有更好的保存方法(使用 PHP)?

谢谢。 抢

【问题讨论】:

  • 对于 VARCHAR,大多数数据库使用所需的字符数加上长度。如果长度小于 255,某些数据库使用单个字节。因此,指定较小的长度不会为您带来任何好处(除非您想强制此长度)。对于密码,恕我直言,您应该使用二进制,因为它的长度不变。
  • 应禁止将 XML 与标签空间效率一起提及。如果您不想将数据结构化到多个表中并关心空间,那么您应该使用不那么浪费的东西,例如,JSON

标签: php mysql sql performance space-efficiency


【解决方案1】:

一些建议:

  • 尽可能多地使用尽可能小的类型(比如 tinyint 而不仅仅是 int)
  • 如果您有一个固定长度的字符串,请使用 char,而不是 varchar(例如,对于您的 md5)

与您的具体案例更相关的注释:

  • 70 个字符对于电子邮件地址来说似乎有点短
  • 保存游戏数据 > 我可能会使用 TEXT 或 BLOB 字段。

【讨论】:

  • TEXT和BLOB有什么区别?
  • text 用于文本数据; blob 用于二进制数据
【解决方案2】:

不要将 xml 存储在文本字段中。使用不同的数据库引擎 - 一个允许您存储任意非结构化数据的数据库引擎。 (查nosql)

【讨论】:

  • 嗯。我不认为我的提供者给了我这个选择。但我会问。
【解决方案3】:

我同意当您同时包含域名时,电子邮件地址长度太短。您可能想了解 Gmail 的最大长度。

另外,您最好将游戏数据保存为文件并将路径保存在数据库中。在表上拥有大量数据总是一个坏主意。

当您在 mySQL innoDB 存储引擎中使用索引时尤其如此,其中使用聚集索引并将行内容存储在索引中。索引会变得非常大且效率低下。

此外,涉及 SELECT/INSERT/UPDATE 的查询也会变得非常慢,尤其是后 2 个。

【讨论】:

  • 感谢您提供有关电子邮件长度的提示。问题是我需要以非常短的响应时间并且经常访问部分数据。所以我认为将其保存为文件并不好。
猜你喜欢
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
相关资源
最近更新 更多