2009-10-16 26 views
0

当我设置MySQL表时,它要求我定义列的名称,输入类型和长度。我的假设没有读到任何有关它的信息,这是为了最小化。根据需要指定尽可能最小的int/smallint/tinyint,这会减少某种类型的开销。如果这是所有的积极因素,使它无符号地加倍你的空间,等等。设置MySQL架构时,为什么要使用某些类型?

如果我只是使每个字段为varchar-200个字符会发生什么?何时/为什么这么糟糕,我会错过什么,什么时候会出现低效率? 100K记录?

我每次创建数据库时都会考虑这个问题,但是我没有构建任何足够的扩展功能,以至于我的方案设置不当,无论是“严格/小”还是“松散/大” 。有人可以证实我对速度和效率做出了很好的假设吗?

谢谢!

回答

3

数据类型不仅优化了存储,而且数据如何编制索引。随着数据库变大,显而易见,搜索所有在整数字段中具有1的记录比在varchar字段中具有“1”的记录更快。当您从多个表中加入数据时,这变得尤为重要,并且数据库引擎不得不重复执行此类操作。 (Daren也正确地指出,重要的是你所匹配的字段类型也是一样的。)

这些低效率成为问题的级别很大程度上取决于你的硬件和应用程序设计。现在我们有足够大的铁,如果你正在构建中等规模的应用程序,你可能看不到明显的差异。 (除了对你的数据库设计感到有点内疚!)但是在小项目中建立良好的习惯使得大项目更容易。

+0

我想添加改变用于表连接的字段长度和类型,确保你总是在两个地方改变它们。对于非相同的索引,表格连接几乎和没有索引一样慢。 – 2009-10-16 19:58:01

0

如果你有两列作为varchar,并放入值10和20并添加它们,你会得到1020,而不是30,你可能会期望。

0

当然,您可以将所有内容保存为VARCHAR字符串。但是你会放弃数据库引擎提供的许多功能。

您应该选择最接近列的预期用途的数据库类型。例如,使用DATE或DATETIME存储日期可为您提供各种基本VARCHAR类型无法获得的日期/时间函数。

同样,用于统计事物或提供简单唯一ID的字段应该是INT或其相关类型之一。还要记住INT只占用4个字节,而9个数字的字符串至少使用9个字节。

对于字符数据,将NVARCHAR用于任何语言环境中用户要输入的国际化值(尤其是名称和位置)是明智的选择。如果您知道该文本仅限于美国或仅限内部使用,则VARCHAR是安全的。

相关问题