我每晚都会收到一个 LDAP 提要。我将它作为文本文件获取并转储/创建我的 LDAPALL 表。大约有 75,000 名员工乘以大约 50 个领域。
我也有以下几点:
LDAPIMPORTANT - 存储所有 75K 但仅 15 个字段的视图
LDAPSHORT - 存储所有 75k 但 5 个字段的视图
LDAPAB - 仅基于两个组存储 9k 名员工的视图(字段查找)
这些中的每一个都被大量使用并用于不同的应用程序,并且针对这些视图编写了很多视图。但是他们没有更新。我们不更新员工数据。它只是每晚一次的 LDAPALL 更新。
在这种情况下,我应该从 LDAPALL 表而不是视图创建表吗?我可以设置工作以每晚创建一次这些表。这背后的最佳实践是什么?用外行的话来说,因为我是一名 PHP 开发人员,专门从事所有数据库管理工作。
如果它们执行,我会简单地使用视图。无需不必要地复制数据,许多数据库平台允许索引或物化视图和过滤视图等。
但是,MySQL 不支持索引视图。因此,除非您的表上的底层索引支持您访问数据的各种方式,否则可能值得您自己实现视图的一个版本。
用包含相同数据(现在重复)的表替换视图的概念称为物化视图。
您的问题的答案可能在这里
我给物化视图+1。如果这是更实时的东西,那就是要走的路。但事实上,我每天只更新一次用户群,这只是大量的工作,却没有什么回报。
我最终设置了一组查询,这些查询计划创建“子表”,我发现这比创建视图更有效。我们有大约 10 个支持一切的子表。其中大多数需要大约 2-4 秒来创建,并且它们在夜间分散超过 20 分钟。
我们确实从这些子表中创建了很多视图,并且与从一张大表中创建大量视图相比,一切都运行得非常快——它只是有很多我们不需要/不需要的数据。