Mos*_*azi 6 t-sql sql-server mdx data-warehouse
我有一个数据库,其中包含超过6亿条记录的表和一组对数据库进行复杂搜索操作的存储过程.即使表上有合适的索引,存储过程的性能也很慢.数据库的设计是一种常规的关系数据库设计.我想将数据库设计更改为多维并使用MDX查询而不是传统的T-SQL查询,但问题是: MDX查询在性能方面是否优于传统的T-SQL查询?如果是,那将在多大程度上改善查询的性能?
谢谢你的帮助.
onu*_*ade 13
苹果和橙子:分析服务OLAP多维数据集是一种与SQL Server数据库完全不同的存储类型,它们旨在执行不同的操作.从技术上讲,MDX并不比T-SQL"更快",反之亦然 - 它们只是语言,但是针对不同的需求而设计.
话虽如此,多维数据集通常最适合对静态数据进行数值分析,例如聚合大量销售/交易/随时间推移的任何记录.相比之下,传统的关系数据库通常可以很好地工作,如果模式和索引构造良好,用于搜索.一种简单的判断方法:如果您的SQL查询必须做很多事情
select grock, sum/min/max/avg( foo )
from bar
group by grock -- Ideal Analysis Services problem
Run Code Online (Sandbox Code Playgroud)
然后一个立方体可能会有所帮助(它是为聚合数学函数设计的 - sum()和group by).OTOH,如果你的查询做了很多
select cols
from foo
where <complicated search> -- Not so much
Run Code Online (Sandbox Code Playgroud)
然后一个多维数据集可能无济于事,我会专注于调整模式,查询和索引,如果数据可以被适当地分区,可能会进行表分区.
您是否有聚簇索引并覆盖与查询匹配的非聚簇索引?
MS SSAS OLAP多维数据集可用于多种存储模式:
关系(OLAP) - 数据和元数据保留在您的数据库中,并添加了更少的物化视图.可能会或可能不会更快.
混合(HOLAP) - 元数据和(预先计算的)聚合存储在运行SSAS实例的新服务器上.这应该使用聚合来加速所有查询,例如"按月计算去年的员工总时数",但是钻取到特定记录的查询可能与以前一样.
多维OLAP(MOLAP),其中所有数据以及元数据和聚合都将复制到SSAS服务器.这通常是最快的,但重复存储.
在开始之前,您应该考虑优化表格布局以进行报告和分析,换句话说,使用数据仓库(DW) - 将数据放入Kimball星形维度和事实表格中.然后定期使用ETL(SSIS)加载DW并将报告和分析指向DW.可能您根本不需要使用SSAS - 针对星表布局运行的SQL查询通常比标准化的DB - 操作数据库快得多.如果这仍然太慢,请在DW上构建SSAS多维数据集.一旦开始加载DW,您就可以从操作数据库中删除记录,从而使每天使用的速度更快.
总而言之,我的经验法则是:
1.构建DW并设置ETL过程
2.尝试针对DW的T-SQL报告,这可能已经足够了.
3.如果仍然很慢,请在HOLAP模式下构建SSAS多维数据集(在DW之上)并使用MDX查询它们.
| 归档时间: |
|
| 查看次数: |
4414 次 |
| 最近记录: |