Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为了提高性能而违反规范化规则是可以接受的吗?_Mysql_Relational Database - Fatal编程技术网

Mysql 为了提高性能而违反规范化规则是可以接受的吗?

Mysql 为了提高性能而违反规范化规则是可以接受的吗?,mysql,relational-database,Mysql,Relational Database,我有一个db,表“product”与表“折扣”相关。 折扣表又与“品牌”和“类别”相关。 我需要知道每个产品的“计算价格”,然后对它们进行排序(大约30000个产品)。 但是,这样一来,查询速度太慢了。 违反规范化的第三条规则,将“calculatedPrice”添加为db中的一列是可以接受的? 该列将通过每5分钟左右运行一次查询来计算。。。 我没有看到任何其他解决方案。我认为这取决于您的情况:例如,我曾经有一个表,其中包含生成发票的信息,例如价格,以及发票发出时的增值税值 增值税价值会随着时间

我有一个db,表“product”与表“折扣”相关。 折扣表又与“品牌”和“类别”相关。 我需要知道每个产品的“计算价格”,然后对它们进行排序(大约30000个产品)。 但是,这样一来,查询速度太慢了。 违反规范化的第三条规则,将“calculatedPrice”添加为db中的一列是可以接受的? 该列将通过每5分钟左右运行一次查询来计算。。。
我没有看到任何其他解决方案。

我认为这取决于您的情况:例如,我曾经有一个表,其中包含生成发票的信息,例如价格,以及发票发出时的增值税值

增值税价值会随着时间的推移而变化,但它不会影响以前发出的发票,因此避免问题的唯一方法是存储价值本身,而不是在“常量值”表上存储引用。事实上,这会产生表内信息的冗余和数据库内可能的“不一致”

P>以上所说的,我会非常仔细地考虑你选择添加一个列的原因(注意,这只是为了让你思考,而不是用手指指向任何地方):

  • 您确定性能会受到表的几个连接的影响吗
  • 如果是这样,您确定问题不存在于您的设计中的其他地方吗
  • 您是否总是需要所有产品的
    calculatedPrice
    值,还是可以减少行数,只计算实际需要的产品的值
如果你对以上所有问题的回答都是“是”,那么就进入额外的专栏


p.S.:在任何情况下,我都会避免“大约每5分钟运行一次查询”之类的事情:这会使系统出现同步问题和并发问题。如果折扣已更改,但“更新查询”尚未运行,会发生什么情况?然后您的程序会检索旧值吗?

我认为这取决于您的情况:例如,我曾经有一个表,其中包含生成发票的信息,例如价格,以及发票发出时的增值税值

增值税价值会随着时间的推移而变化,但它不会影响以前发出的发票,因此避免问题的唯一方法是存储价值本身,而不是在“常量值”表上存储引用。事实上,这会产生表内信息的冗余和数据库内可能的“不一致”

P>以上所说的,我会非常仔细地考虑你选择添加一个列的原因(注意,这只是为了让你思考,而不是用手指指向任何地方):

  • 您确定性能会受到表的几个连接的影响吗
  • 如果是这样,您确定问题不存在于您的设计中的其他地方吗
  • 您是否总是需要所有产品的
    calculatedPrice
    值,还是可以减少行数,只计算实际需要的产品的值
如果你对以上所有问题的回答都是“是”,那么就进入额外的专栏


p.S.:在任何情况下,我都会避免“大约每5分钟运行一次查询”之类的事情:这会使系统出现同步问题和并发问题。如果折扣已更改,但“更新查询”尚未运行,会发生什么情况?然后您的程序会检索旧值吗?

您可以做任何您想做的事情。然而,我建议你重新阅读这些“规则”的基本原理。原因是,如果你打破了规则,你也会失去从中获得的优势。主题是“非规范化”。此外,您的问题也是常见问题。总是用谷歌搜索你的问题/问题/目标的许多清晰、简洁和具体的版本/措辞,并阅读许多答案。将发现的相关关键字添加到搜索中。如果你找不到答案,就发布,使用一种变体搜索你的标题和标签的关键词。可能重复的你可以做任何你想做的事。然而,我建议你重新阅读这些“规则”的基本原理。原因是,如果你打破了规则,你也会失去从中获得的优势。主题是“非规范化”。此外,您的问题也是常见问题。总是用谷歌搜索你的问题/问题/目标的许多清晰、简洁和具体的版本/措辞,并阅读许多答案。将发现的相关关键字添加到搜索中。如果你找不到答案,那么发布,使用一种变体搜索你的标题和标签的关键字。可能重复