使用索引或通过代理 ID 替换值并添加单独的 table?

Use index or replace values by surrogate ids and add a separate table?

目前我在 mysql:

中有几个 pivot table 具有这种结构

user_id | organisation_id |输入

4   3   external
4   3   internal
6   4   internal
7   4   external
6   5   external
7   5   external
7   6   internal

如您所见,在我的 type 专栏中我只使用了 externalinternal。当前 type 列是 enum 并且已编入索引。

这是一个好的数据库结构还是我应该为列 type 创建一个单独的 table?

我有这个 "problem" 和几个 table,所以这是一个重要的决定。 table 可能会变得相当大。

遇到这种情况你会怎么做?

这在很大程度上取决于您要针对此 运行 进行的查询类型 table。

如果您计划 运行 查询 忽略 type 列,即不关心它是内部的还是外部的,或者查询决定什么type 他们想要在 运行 时间,例如通过用户输入,将所有内容保存在一个 table.

中有很大的优势

通常,索引一个选择性差的列,即在其两个类别中各有大约一半的行,与完整的 table 扫描相比,只能提供边际性能改进。将 table 一分为二也是如此:它会使查询变得更加复杂,但改进很少。