gpt4 book ai didi

MySQL 添加列的最佳实践

转载 作者:行者123 更新时间:2023-11-29 00:41:37 25 4
gpt4 key购买 nike

所以我开始在一家公司工作,他们有 3 到 5 个不同的表,这些表经常通过复杂的连接或通过双重、三重查询进行查询(我可能是第四个开始在这里工作的人,它非常困惑).

无论如何,我创建了一个表,当同时查询其他 3 或 5 个表时,该表会将数据连同通常插入到那里的任何信息一起插入到我的表中。它大大加快了许多应用程序的页面速度,我想知道我是否在这里犯了错误。

我希望将来能删除插入到其他表中的操作,而只是将所有这些信息插入到我已启动的表中,并将应用程序切换到该表。它只是快了很多。

有人能告诉我为什么将所有信息分组到一个大表中要快得多吗?这样做有什么缺点吗?

最佳答案

如果连接很慢,可能是因为表没有 FOREIGN KEY正确定义的关系和索引。如果表之前已经正确规范化,那么将它们非规范化为单个表可能不是一个好主意除非它们没有适当的索引性能 . FOREIGN KEY约束需要在 PK 表和相关的 FK 列上建立索引,因此简单地定义这些约束(如果它们尚不存在)可能对提高性能大有帮助。

第一步是确保正确定义表关系并为表建立索引,然后再开始对其进行非规范化。

有一个概念叫materialized views ,它通过将 View 查询的结果存储到临时表中,作为结果集是确定性的 View 或查询的一种缓存。 MySQL 不直接支持物化 View ,但您可以通过偶尔从多表查询中选择所有行并将输出存储到表中来实现它们。当该表中的数据陈旧时,您可以用新的行集覆盖它。对于简单 SELECT用于显示不经常更改的数据的查询,您可以使用此方法加快页面加载速度。不建议将它用于不断变化的数据。

实体化 View 的一个很好的用途可能是构建行来填充站点的下拉列表或存储每周只运行一次的复杂报告的结果。它们的不良用途是存储客户订单信息,这需要及时访问。

关于MySQL 添加列的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12040567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com