sql-server - 当数据频繁更改时创建索引视图是否有意义?
问题描述
我有大约 5 个表,每个表中都有超过 1,000,000 个数据集。
我读过有关索引视图的信息,它们可以提高连续查询的性能。但是表格/数据是连续更新的,视图后面的语句只是不时返回数据集的一小部分(有时每小时,但它可能每天或每周都在变化,它会波动)。
在每个表上创建索引并不聪明,因为数据会不断增长,索引会比数据本身大(开玩笑,但在这种情况下真的不聪明)
那么,您对我实现目标的建议是什么,以创建一个性能足以在每次我需要数据时击败正常语句的视图。
解决方案
这不是一个明确的答案,而只是一些需要考虑的一般性想法。
一条重要的信息是 5 个基础表的索引。如果这些索引对视图有帮助,那么查询优化器将使用它们,因此视图上的索引可能不会使视图更快。
仅基于您提供给我们的信息,主要问题是业务需求,这将有助于确定您的数据库架构:表更新频率、视图查询频率、更新速度和视图查询需要执行,以及视图数据需要的最新程度。
如果视图查询性能比表更新速度更重要,那么使用索引视图。
如果视图数据可以缓存但不是最新的,并且表更新速度很重要,那么您可以定期将所有表数据复制到报告表中,例如每天或每小时一次。在该报表上,您可以为快速读取查询创建索引。
如果视图性能不重要,但视图数据必须是最新的,并且表更新速度很重要,那么您可能必须使用非索引视图,并且可能依赖表扫描来处理每个视图查询。
推荐阅读
- java - 在我的情况下,依赖注入的最佳代码结构是什么?
- node.js - CW: 产品类型所需的城市信息::local_conditions' Here Map
- amazon-web-services - AWS CLI:ECS register-task-definition 和 requires-compatabilies 选项
- python - 使用 pandas 读取和更新 XLSM 文件中的工作表,同时保留 VBA 代码
- reactjs - 隐藏除一个工具提示之外的所有工具提示
- halide - 是否可以从卤化物代码生成(.ll)文件?
- php - docker 容器无法连接到 localhost mysql 服务器
- java - 在 Java 应用程序中使用 JAXBContext 解决内存泄漏
- elasticsearch - 在 ElasticSearch 索引模板别名中使用通配符
- python - 为什么我会得到不同的 dict 对象 ID