MySQL - 按数字或字母查询?

时间:2014-03-29 16:50:56

标签: mysql

我需要将值设置为"Yes or No"列名称STATUS。我正在考虑两种方法。

方法1(使用字母):设置值Y/N,然后通过以下查询查找字段Y中值STATUS的所有行:

SELECT * FROM post WHERE status="Y"

方法2(使用数字):设置值1/0然后通过以下查询查找字段1中值STATUS的所有行:

SELECT * FROM post WHERE status=1

我应该使用方法1还是方法2?哪一个更快?哪一个更好?

4 个答案:

答案 0 :(得分:1)

这两者基本上是等价的,所以这成为一个对你的应用更好的问题。

如果您担心空间,那么一个字符的最小空间为char(1),使用8位。使用数字,您可以使用bit或set类型来打包多个标志。但是,如果你有很多旗帜,这只会产生影响。

以商店为对象的方法略有优势,您可以计算"是"通过这样做的价值:

select sum(status)

(当然,在MySQL中,这只是对sum(status = 'Y')的一个微小改进。

如果您决定包含"可能"那么以字母为单位的商店方法会略有优势。或者将来某个时候的其他价值观。

最后,表示这些值的不同方式的性能差异将非常非常小。您需要一个包含数百万行的表来开始注意到问题。因此,请使用最适合您的应用程序的机制以及表示值的方法。

答案 1 :(得分:0)

最快的方式是;

 SELECT * FROM post WHERE `status` = FIND_IN_SET(`status`,'y');     

我认为您应该使用ENUM('n','y')创建列。 Mysql以最佳方式存储此类型。它还可以帮助您在字段中仅存储允许的值。

您还可以使其更加人性化ENUM(' no',#39;是')而不会影响性能。因为字符串' no'和'是'每个ENUM定义仅存储一次。 Mysql只存储每行值的索引。

答案 2 :(得分:0)

第二个肯定更快,主要是因为每当你在引号内涉及某些内容时,它对SQL来说毫无意义。最好使用非字符串类型以获得更好的性能。我建议使用方法2。

答案 3 :(得分:0)

我认为如果您关注存储预期,方法1会更好。 因为存储一个整数,即1/2,需要4个字节的内存,而字符只占用1个字节的内存。所以最好使用方法1。 这可能会提高一些性能。