2016-03-01 266 views
0

我有一个非常大的MYSQL表包含800000记录。我想知道哪种类型的性能更好枚举基于以下参数MYSQL - 哪个枚举执行更好的枚举('Y','N')或枚举('1','0')

  1. 存储(“男”,“女”)或枚举(1,0)
  2. 查询性能 - 这就像当我将使用

    SELECT cols FROM table WHERE type = 'female' 
    or 
    SELECT cols FROM table WHERE type = 0 
    

然后哪一个更好的表现或有任何其他方式来处理这种情况?

+0

存储和性能应该是相同的。您可能想阅读这篇关于使用枚举的文章:http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/也许使用枚举不是最好的选择。另一种方法是将类型存储在单独的表中,并使用外键和连接,这对数据完整性可能更好。 – jpw

+0

好的,但据我所知;在where子句中使用'1'会更好地使用'Y';不是吗? –

+0

@JatinSeth:为什么会这样? – Thilo

回答

3

应该没有任何区别。

枚举编码为数字,因此结果对于您的示例都是相同的。

如果有的话,你应该使用某种枚举比较使用varchar,bit或numeric列(可能是由约束强制执行)。

+0

是的。枚举被编码为数字。你给你的枚举选项的名称并不重要。在表格和索引中,列值存储为0,1,2 ...... – Thilo

+0

是的,你说得很对,但是请你告诉我为什么当我使用TINYINT而不是ENUM时,知道Mysql如何处理这些。 –

+0

TINYINT不太可能有显着的性能差异。如果您对此感兴趣,请发布一个新问题,并确保包含您的完整观察结果(包括解释查询命令的输出)。 – Thilo

0

我在MYSQL测试了这个事情,我下面的结果给出:

  1. 在性能上没有区别,当我们用ENUM比较ENUM(“男”,“女”)(“1” ,'0')
+0

量化“巨大”。 – Thilo

+1

查询8次lac记录时,相同的查询花了0.124秒的ENUM和0.072秒的TINYINT。 –