通过比较ENUM和SET列来选择行的最佳方法是什么

时间:2013-06-10 18:22:43

标签: mysql enums

我的意思是如果任何表包含ENUM或SET类型列,我将进行如下查询:

SELECT * FROM `tabname` WHERE `enum_field` = 'case1' OR `enum_field` = 'case2'

它会有效吗? 或者引擎会将存储在enum_field中的数字转换为字符串,将其与模式进行比较(在我的示例中为case1和case2)? 使用此类列的最有效方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

您在上面提供的语法是正确的 数据库引擎会将查询中的字符串转换为数字索引,这些索引将在搜索表时使用。

根据 mysql documentation ,您还可以直接通过数字索引进行查询,但这有时会产生意外结果,尤其是当您的任何枚举字符串值都是数字时。

因此,假设“case1”具有索引1,而“case2”具有索引2,则可以像这样重写查询:

SELECT * FROM `tabname` WHERE `enum_field` = 1 OR `enum_field` = 2