0

存储用于创建报告的大量(数百万)记录的最佳方式是什么?应用程序的性质要求将与搜索匹配的每条记录发送到应用程序进行处理,因此查询执行速度和查询结果传输速度对我们来说都是重要因素。

目前,我们的应用程序将记录存储在一个直接的 MSSQL 表中,该表为查询性能而进行了大量索引。是否有人有任何替代存储想法,或者即使我们只能将记录存储在一个表中,因为数据本身不是关系,但关系数据库是否适合此?

SQL 解决方案为我们提供了相当不错的性能,但如果还有其他更好的后端替代方案,我很感兴趣,例如 NoSQL 数据库是开始研究的有效解决方案吗?

我们的查询是针对少量列进行的,但结果的大小可能会有所不同(每次执行所需的行数取决于周期和其他一些参数)。

提前感谢您帮助我获得一些新的观点。

由于我们是一家 .NET 商店,任何适合 .NET 和 Windows 服务器的解决方案/想法对我们来说都是一个很大的优势,但我很感激我能得到的所有意见。解决方案是指 MSSQL 或其他关系数据库以外的其他后端?

4

2 回答 2

1

查询效率取决于查询和索引

将数据传输到客户端:

  • 只是一个直接的 DataReader 是非常有效的
  • Drapper 也很快,但我没用过

我有一个有效的解释,即应保存查询结果以重新运行
查询仅运行一次

Data
int ID iden 
varchar Value1
varchar Value2

SavedQuery
int ID iden 
varchar name 

SavedQueryResults 
int QueryID PK
int DataID PK

Select [Data].[Value1],  [Data].[Value2]
From [Data] 
Join [SavedQueryResults]
  on [SavedQueryResults].[DataID] = [Data].[ID]
 and [SavedQueryResults].[QueryID] = x 

使用 SavedQueryResults 上的 PK 这应该会导致索引搜索并且不能做得比这更好。

当您创建 SavedQueryResults 时,使用插入中的 DataID 顺序来降低碎片

于 2013-04-12T13:29:37.763 回答
0

你为什么不宁愿有几个报告表,用触发器更新,它会更有效率。与 CQRS 世界中的视图模型相同。

于 2013-04-12T16:27:13.887 回答