dukanuwdn Asked: 2023-08-10 17:54:02 +0800 CST2023-08-10 17:54:02 +0800 CST 2023-08-10 17:54:02 +0800 CST 我是否应该将属性放入每个表中,即使它们链接在一起以提高性能? 772 为锻炼应用程序创建架构,当前正在为已完成的锻炼课程构建日志。 这是我想知道的部分: 想知道我是否应该在每个表中添加日期。原因是我想要一页记录迄今为止的锻炼历史记录,一项迄今为止的锻炼统计数据,然后在即将进行的锻炼中代表最新的体重计算。 即使它们相同,在每个表中添加日期会是不好的做法吗?仅将日期放入“Rep Log”中不会对性能不利吗? mysql 1 个回答 Voted Best Answer J.D. 2023-08-10T20:35:44+08:002023-08-10T20:35:44+08:00 即使它们相同,在每个表中添加日期会是不好的做法吗? 是的。它使您面临维护数据完整性的风险,例如,当输入错误的数据并需要更新时。现在,您必须确保以事务一致的方式使用正确的值更新所有 3 个表。本质上,您始终需要使用包含所有 3 个表的 DML 更改(INSERTs、UPDATEs 和DELETEs)的显式事务,以确保在发生错误或数据库或应用程序崩溃时它们之间的数据正确一致性。 说到这里,通过将相同的数据点更新为现在的 3 倍,并被迫将所有 3 个表的更改包装在同一个事务中,您最终会对性能产生负面影响,因为工作量增加了,而且工作量也增加了。在写入期间表将被锁定,这将阻止其他写入者(并且根据您的隔离级别,其他读取者)访问这些表,这以前可能同时发生。 仅将日期放入“Rep Log”中不会对性能不利吗? 没有。这就是所谓的过早优化思维。对于正确索引和架构的表,无论表有多大,从表中JOIN获取字段都应该花费几毫秒或更短的时间。dateWorkout Log 在一些例外用例中,带有预先计算的数据点的非规范化表可以提高大规模报告性能。但这通常仅适用于您计划运行涉及大型事务表的大部分或全部行的聚合时。您的应用程序用例不属于此类别。 遵循典型的规范化设计模式和索引架构,并且不必担心在遇到实际性能问题之前过早过度优化。由于所述性能问题的解决方案将非常具体于当时存在的数据。在此类问题存在之前,不可能对其进行优化。
是的。它使您面临维护数据完整性的风险,例如,当输入错误的数据并需要更新时。现在,您必须确保以事务一致的方式使用正确的值更新所有 3 个表。本质上,您始终需要使用包含所有 3 个表的 DML 更改(
INSERT
s、UPDATE
s 和DELETE
s)的显式事务,以确保在发生错误或数据库或应用程序崩溃时它们之间的数据正确一致性。说到这里,通过将相同的数据点更新为现在的 3 倍,并被迫将所有 3 个表的更改包装在同一个事务中,您最终会对性能产生负面影响,因为工作量增加了,而且工作量也增加了。在写入期间表将被锁定,这将阻止其他写入者(并且根据您的隔离级别,其他读取者)访问这些表,这以前可能同时发生。
没有。这就是所谓的过早优化思维。对于正确索引和架构的表,无论表有多大,从表中
JOIN
获取字段都应该花费几毫秒或更短的时间。date
Workout Log
在一些例外用例中,带有预先计算的数据点的非规范化表可以提高大规模报告性能。但这通常仅适用于您计划运行涉及大型事务表的大部分或全部行的聚合时。您的应用程序用例不属于此类别。
遵循典型的规范化设计模式和索引架构,并且不必担心在遇到实际性能问题之前过早过度优化。由于所述性能问题的解决方案将非常具体于当时存在的数据。在此类问题存在之前,不可能对其进行优化。