"其中"或"喜欢"使用索引

时间:2015-10-21 23:18:17

标签: mysql indexing where-clause

我有一个包含SET类型列的表,例如SET('abc','def','ghi'),它存储像"abc,ghi"这样的数据,并为这些列编制索引。因此,当我想查找"def""ghi"时,我必须使用LIKE "%def%",但我读到"%"如果您将其用作第一个字符,则mysql不会使用+---------+ | column | +---------+ | abc | | abc,ghi | | abc,def | | ghi,def | +---------+ 搜索索引。我该怎么办?我应该将类型更改为枚举并将每个值存储在具有以下ID的单独行中:

+----+--------+
| ID | column |
+----+--------+
| 1  | abc    |
| 2  | abc    |
| 2  | ghi    |
| 3  | abc    |
| 3  | def    |
| 4  | ghi    |
| 4  | def    |
+-------------+

更改为:

Tuple{Int, Int}[]

或者是否有任何操作索引来分别存储每个单词?

1 个答案:

答案 0 :(得分:1)

在集合中查找项目的正确函数是FIND_IN_SET。集合存储为位图,而不是字符串,FIND_IN_SET在匹配LIKE之前不必将其转换为字符串。但它仍然无法使用索引。

您的第二个架构是规范化数据的正确方法。您可以在column列上放置索引,查找值的查询将非常有效。是否在此列中使用ENUMVARCHAR是数据库社区中激烈争论的主题。