存储大量数据行以进行查询的最佳方法

时间:2013-04-12 13:16:37

标签: .net sql-server database

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

目前,我们的应用程序将记录存储在一个直接用于查询性能索引的MSSQL表中。 有没有人有任何替代存储想法或关系数据库是否适合这一点,即使我们只能将记录存储在一个表中,因为数据本身并不是关系型的?

SQL解决方案为我们提供了相当不错的性能,但是如果还有其他更好的后端备选方案,我很感兴趣,例如NoSQL数据库是否可以开始寻找有效的解决方案?

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

提前感谢您帮助我对此有了新的看法。

由于我们是.NET商店,任何适合.NET和Windows服务器的解决方案/想法对我们来说都是一个很大的优势,但我很欣赏我能得到的所有输入。 通过解决方案,我的意思是除MSSQL或其他关系-dbs之外的其他一些后端?

2 个答案:

答案 0 :(得分: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,这应该导致索引搜索,并且不能做得更好。

在插件中按DataID创建SavedQueryResults使用顺序以保持碎片不足

答案 1 :(得分:0)

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