在MySQL表中,我有几列 - 一些包含字符串,一些日期或数字。我一直只是制作每个字段varchar(200)。创建更合适的字段类型有什么好处?选择查询会变得更快吗?
答案 0 :(得分:5)
使用数据类型意味着您将能够以有意义的方式实际使用数据。例如,您可以进行日期算术(例如,使用DATE_ADD)。
这也意味着按数字排序将按预期工作(不会使用字符串)。
它还允许mysql为您所代表的数据选择适当的存储量/类型。
有很多原因,尤其是它使得使用您的架构的其他人更容易知道期望的值类型。它还允许mysql对您的数据进行验证(如果您的“日期”列包含“一次在蓝色的月亮中”会发生什么?)
答案 1 :(得分:2)
简短回答:是的,他们很可能会更快。
如果你有很多行,你将节省大量的磁盘空间。例如,INT使用的空间比VARCHAR(200)少。此外,选择相关列类型将为您提供type safety的某种度量(取决于您的代码或数据库将为您做多少个类型转换)。
答案 2 :(得分:1)
使用数字字段中的索引时速度为10x-100x
答案 3 :(得分:0)
我是否理解正确,您在varchar(200)列中存储了数字和日期?
嗯,你不能比较日期,用数字等计算。
考虑如下查询:
SELECT yourfieldlist
FROM YourTable
WHERE DateColumn > '2009-10-01'
如果DateColumn是varchar(200),则无法按预期工作。因此,对列使用适当的类型非常重要。
如果您只使用这一种数据类型,为什么还要使用数据库呢?只需将数据填入文本文件即可。
答案 4 :(得分:0)
该类型告诉DBMS如何与该字段进行比较。例如,这允许您查找date_created>的行。容易“约会”。
简而言之,是的,如果您使用正确的类型并且正在与这些字段进行比较,您的选择会更快,因为MySQL将知道如何更好地索引数据以更有效地返回结果。如果您只是在没有任何联接的情况下进行基本选择,在哪里或者订购那么您可能不会看到速度提升。
答案 5 :(得分:0)
另一个好处是数据类型可确保提供的数据的正确性。通常,无论如何--- MySQL并没有高度重视其正确性。例如,"laksjfd"
不是有效日期。也不是"2009-02-29"
---但是"2012-02-29"
。但这些都是有效的varchar(200)
。