mysql - 使用大量可能的连接进行查询的最佳方法

标签 mysql sql join

在我正在处理的项目中,我们有一个事件表,每个事件都可以链接到大约 20 个不同的“事件详细信息”表中的一个...

例如如果事件是“工作”类型,那么它将有相应的 activity_details_work 记录,如果它是“病假”类型,那么它将有相应的 activity_details_sickleave> 记录等等。

目前我们正在加载事件,然后对于每个事件,我们都有一个单独的查询以从相关表中获取事件详细信息。如果您有数千个事件,这显然不能很好地扩展。

所以我最初的想法是使用一个查询来一次获取事件并加入详细信息,例如

SELECT * FROM activity
LEFT JOIN activity_details_1_work ON ...
LEFT JOIN activity_details_2_sickleave ON ...
LEFT JOIN activity_details_3_travelwork ON ...
...etc...
LEFT JOIN activity_details_20_yearleave ON ...

但这会导致每条记录都有 100 多个字段,其中大部分是空的,感觉很糟糕。

延迟加载细节也不是真正的选择,因为核心逻辑中几乎总是需要细节,至少对于主要类型而言是这样。

有没有我没有想到的 super 聪明的方法?

提前致谢

最佳答案

我的建议是为每个 ActivityType 定义一个专门针对该事件定制的 View 。

然后在ActivityType 字段引导的Activity 表上添加一个索引。 Cluster 表示索引,除非迫切需要对其他一些进行集群(或者性能基准测试显示其他一些集群选择的性能更高)。

设计这种非规范化程度是否有特殊原因?这个原因众所周知吗?

关于mysql - 使用大量可能的连接进行查询的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16252444/

相关文章:

python - 根据索引和列将填充的 DataFrame 合并到掩码中

c# - Linq 查询从 Sql 数据库返回重复记录

mysql - 在 MySQL 触发器中创建变量

mysql - 合并两个表,排除相同的记录

mysql - 具有多个子选择连接的 MySQL 查询速度较慢

mysql - 使用 mysql 的 COUNT 防止重复

php - Prestashop 1.6 每个时间段的订单号序列重置

mysql - 分组内循环和限制

php - 刚接触bind_param,这段代码有什么问题?

sql - 在 Entity Framework 中锁定表