2009-07-09 79 views
3

当我在MySQL中定义列时,我通常使用int,varchar(255),text和偶尔的boolean枚举。准确指定列类型的好处是什么,而不是将它们放在最大限度?你应该准确地指定MySQL中的列类型吗?

例如,编码为MD5的密码字段永远不会超过32个字符,因此通过varchar(255)使用varchar(32)可以获得切实的性能增益吗?

回答

4

根据the manual,给定实际长度的一个VARCHAR(N)对于任何N达255的空间占用相同的空间量,因此使用32不会节省空间。但是,在使用最能表示实际数据必须是什么类型的类型时,您的模式具有清晰性和可读性的优点。

1

对于整数类型,如果在适当时使用一个字节/两个字节的整数而不是四个或八个字节的整数,则可节省行中的空间。这对具有大量数据的表格确实有实际影响,因为更多的行将适合页面。

对于字符类型,我真的不确定它是否会影响数据库和代码。但考虑一下数据库设计师告诉软件开发人员的分工:“嘿,不要让人们在这个领域投入超过100个字符,这将是一个完全浪费”。你通过设置限制来强制实现,如果是varchar(255),那么人们可能会浪费空间。

1

由于列宽,现代RDBMS并不能真正为255个字符列在50个字符列上提供更好的性能。

在SQL Server上,我注意将我的姓名,地址等作为NVarChar,这样我可以在需要时进行国际化。我的电话号码存储能够在美国存储10位以上的数字。

2

我同意克莱德说的,但是你的密码的例子并不是特别好。由于MD5总和总是32个字符,因此可以使用CHAR(32)而不是VARCHAR(32),在许多情况下,这会更快/更高效。

2

如果可以固定行大小,那么这样做有很大好处。然后索引是超快的。您将不得不使用固定的列类型,如int和char(一些大小)的文本。

如果无论如何您的行大小都会变化,并且您的表格的记录不会超过100k,那么您不必担心优化问题。文本而不是varchar更灵活。

关于数据验证,我认为您应该在您的业务代码/验证中执行此操作。

相关问题