我正在做一个项目,在这个项目中我需要能够为员工创建自定义字段。这些字段将类似于名字、姓氏等。
我被要求对此进行优化,以便为有200个字段的10,000名员工工作。
现在我有一个"employee“表、一个”字段“表和pivot表("employee_field")。pivot表用该字段所需的数据类型存储可空列中每个字段的员工数据。它还包含employee id和字段id。
我发现加入这些表大约需要0.5秒才能加载500名员工,其中包含50个字段。
我将尝试创建另一个表,以保存应用程序所需的所有已连接数据。这基本上是一个包含employee id、字段id、字段标签、格式化数据和字段类型别名的表。此表将使用数据库触发器保持最新状态。
问题:我遵循这种连接的最佳实践吗?有什么方法可以优化这个操作来读取这些数据?
发布于 2017-02-28 18:52:45
您有一个实体属性值数据模型。这样的模型本身并没有什么问题,但它似乎对您的目的来说是过分的。
MySQL应该能够很容易地处理一个包含200列的表。我的建议是避免连接,只需定义所需的表。
现在,你的情况可能会更多变一些。也许需要添加新的列。在这种情况下,新的字段是可以的。。。如果添加它们的次数不多,并且它们适用于所有员工。
如果您经常需要处理新字段,或者不同的员工有不同的字段子集。如果是这样的话,那么我会推荐一种混合模式。将几十个公共字段放在一个表中,然后为新属性构建一个更灵活的EAV模型。
发布于 2017-02-28 19:12:03
经过进一步的测试,我得出的结论是,这与绑定到SQL而不是SQL模式的应用程序有关。
https://stackoverflow.com/questions/42516506
复制相似问题