繁体   English   中英

如何管理一百万条记录?

[英]How to manage a million records?

我真的需要专家的帮助来回答我的问题。

这是场景:

我正在使用 sql select 查询来检索一百万条记录。 我需要对存储在数据表中(在一次执行中)的结果记录执行排序和分组,并循环遍历它以对其进行分组和排序。 我知道这太幼稚了,不是处理它的正确方法。 我怎样才能有效地管理百万条记录并对其进行分组和排序?

这里真的需要帮助。 听说过批量执行 select 查询,但是当我们手头没有全部数据时如何实现分组和排序? 我不能 go 为 sql 直接订购和分组,这违反了我的要求。

这是我现在正在做的事情:

我有以下对象,即用于分组和排序的列名

List<Group> groupList;
List<Sort> sortList;
DataTable reportData; // Here im having the entire records from db

我逐行循环“reportData”并匹配当前行和上一行以进行自定义分组和排序。 想知道当我们使用分批执行或有任何替代解决方案时如何完成同样的工作吗?

我需要对存储在数据表中(在一次执行中)的结果记录执行排序和分组,并循环遍历它以对其进行分组和排序。

做什么的?

严重地。

不要拉,然后尝试在后面加上一个愚蠢的 object model 聪明(而且数据集不是特别聪明,抱歉)。

在您的 select 语句中进行分组和排序,提取已经分组和加入的数据并完成它。

17 年前发布原始版本(4.2,sysase sql 服务器的端口)时,一百万条记录是 sql 服务器的少量数据。 如今,它很可能适合处理器的三级缓存,而 sql 服务器甚至意识到它刚刚处理过。

SQL 是做项目的特别好的广告,自从他们引入 MARS 以来,您甚至可以在一个连接上运行多个查询,这在这里派上用场。

因此,go 返回 - 丢弃数据集并“我尝试编写排序算法”并创建适当的 SQL 语句以根据需要提取数据。

听起来你应该实施Partition Pruning 分区将允许像您请求的那样分离内容,以便进行更快的查询。

如果我理解正确,在你的情况下,我会创建一个临时数据库表,其中包含我想要特别覆盖我的分组的结构。

然后我将 select 主表中的记录并将它们插入到临时表中,应用所有修改,包括分组。

还应应用有关您希望它们如何排序的特定索引。

之后就从这个表中取出select,做你该做的,最后如果数据不再需要了,删除临时表。

我会选择上述解决方案,因为 memory 中的一百万条记录对我来说很麻烦......

例如:

1. 假设您希望按 DocumentTypeID 对它们进行分组

var groupByType = reportData.GroupBy(g=>g.DocumentTypeID); 

2. 按字母排序

 var sortAlphabetically = reportData.OrderBy(g=>g.DocumentName);

3.分组排序

var groupAndSort = reportData.GroupBy(g=>g.DocumentTypeID)
                             .OrderBy(g=>g.DocumentName);

4.排序和分组

var groupAndSort = reportData.OrderBy(g=>g.DocumentName)
                             .GroupBy(g=>g.DocumentTypeID);

5. 多重分组排序

var multipleGroupAndSort = reportData.GroupBy(g=>g.DocumentTypeID)
                                     .GroupBy(g=>g.CreatedOnDate.Month)
                                     .OrderBy(g=>g.DocumentName);

等等等等...

但我仍然不鼓励将百万行带到应用程序中。 费用是memory,当然有存储过程等方式管理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM