【发布时间】:2021-10-04 13:29:04
【问题描述】:
我正在尝试正确设计数据库,但我不确定我应该选择 2 个选项中的哪一个。将有大约 20 个布尔值用于过滤(为简单起见,示例中有 4 个)。
- 道具1
- 道具2
- 道具3
- 道具4
选项 1)
每个道具的 int(1) 或 varchar(1) 字段。查询的过滤器部分可能像
WHERE prop1=1 AND prop3=1 AND prop4=1
选项 2)
使用带有代表道具的字符的单个文本字段
- a:prop1
- b: 道具2
- c: 道具3
- d: prop4
那么类似于选项 1 的查询的过滤部分会像
WHERE props LIKE '%a%' AND props LIKE '%c%' AND props LIKE '%d%'
或者如果字符已排序:
WHERE props LIKE '%a%' AND props LIKE '%cd%'
我的想法是选项 2 更容易添加新的道具,所以我喜欢这个选项,但是 LIKE 比较器的性能会比相等比较器差吗?与多个 int(1) 或 varchar(1) 相比,使用单个文本有什么不同吗?还有其他我没有想到的好处或缺点吗?
【问题讨论】:
-
字符串字段肯定会变慢。在现代 MySQL 版本上,您可以使用 JSON 字段,它可能会比字符串字段执行得更好,但可能仍然比单个字段慢。
-
别再考虑性能了。
-
如果您需要过滤的行只有几百 - 几千,那么不要太担心,选择最容易处理的;如果您需要它来扩展并且将查询数百万行,那么高效的存储和使用整数或小整数值将会得到回报。
标签: mysql database-design database-performance