2017-09-14 66 views
1

我需要将未知数据类型保存到字段。因此,我不得不使用VARCHAR而不是整数(因为数据也可以是一个字符串)mysql性能<, > for varchar vs整数

id, filter1, filter2 
1, male, 24 
2, female, 53 

在这种情况下,过滤器1是性别和过滤器2的年龄。如果我查询有没有很大的性能影响:

SELECT * FROM tbl WHERE filter2 > 30 

与使用整数相比?

+2

你的问题的开头句子表明你没有把足够的思想放到你的应用程序中。 –

+0

这取决于很多可能因您而定的因素。最好的做法是简单地自己测试一下。这并不困难。我在索引列上测试了900万行MyISAM表,我发现varchar看起来有点慢,但没有太多。 –

+0

@DanBracuk不幸的是,这是一个遗留系统,我不得不重新设计。这就是我发布这个问题的原因。我目前正在审查数据库设计 – Chris

回答

1

如果你写:

where filter > 30 

那么MySQL会做你想要什么 - 但你可能会得到奇怪的结果。如果您有一个值为'44x'的列,那么它也会被筛选器选中。为什么?因为MySQL会将filter转换为字符串。另外,类型转换通常排除使用索引。

如果使用字符串:

where filter > '30' 

那么你不必字符串转换问题,但你会得到所有以字母开头的字符串。

换句话说,不要混合这样的类型。值应该存储在它们的本地类型中。您应该重新访问您的数据模型 - 您可能需要一个名为age的专栏(或更好的是,出生日期)。

+0

不幸的是,我不知道过滤器是什么。客户可以自己定义它们。所以我不知道这是一个字符串还是数字。我目前唯一的限制是最多有5个过滤器(即我的表格中有5列:filter1 ... filter5) – Chris