2017-10-04 79 views
0

该教科书告诉我,不建议使用枚举数据类型的索引。但它没有告诉我为什么。我应该使用ENUM的索引吗?本书还告诉我,我们应该在WHERE子句中使用我们使用的列索引。我总是在我的查询的WHERE部分中使用ENUM,并且应该根据本书进行索引。它也表示不索引枚举的数据类型。现在我该怎么办?ENUM数据类型的索引

编辑:

我想我犯了一个错误,而问,我刚刚看了一遍同一本书,我想我有一个误解,而读的书并没有明确说,我们不应该对ENUM使用索引但它表示我们不应该使用具有非常有限值的列的索引,例如yes/no,0/1等。我从本书中抓取的是这些列是ENUM类型的。

+0

ENUMS也可以有NULL值,因此他们不应该被索引.. https://dev.mysql.com/doc/refman/5.7/en/enum.html –

+0

我不认为我有一列我的系统使用ENUM类型。只是在说'。 – Strawberry

+0

@Strawberry ..在数据库中枚举或不在数据库中是个人偏好,但它确实为可能修改表单字段和不应该在数据库中的输入值的用户提供某种数据库级别的安全性。例如: - 性别列如果不是enum,那么你可以让某人进入数据库,当你选择你的数据时你会遇到问题 –

回答

0

enum数据类型只是stored as a number(列表项值的列表中的位置):指定

的字符串作为输入值自动编码为数字。

因此,enum字段可以像任何其他数字字段一样进行索引。

+0

是的,我在阅读这本书的时候误会了一些,但是为什么这本书告诉我不要索引具有非常有限的数值范围的列,比如是/否,0/1等。 – user15

+0

是的,这是一个不同的故事。具有如此有限的各种值的领域的索引提供有限的选择性,因此优化者倾向于忽略它们。您仍然可以将它们用作多列索引的一部分。 – Shadow