如何管理一百万条记录
本文关键字:一百万 记录 管理 何管理 | 更新日期: 2023-09-27 18:30:07
我真的需要专家的帮助来回答我的问题。
这是一个场景:
我使用sql选择查询来检索一百万条记录。我需要对存储在数据表中的结果记录进行排序和分组(在一次执行中)并在其中循环以对其进行分组和排序。我知道这太幼稚了,不是正确的处理方式。如何有效地管理百万条记录,并对其进行分组和排序?
这里真的需要帮助。听说过批量执行选择查询,但当我们手头没有全部数据时,如何实现分组和排序?我不能直接使用sql order by和group by,这违反了我的要求。
以下是我现在正在做的事情:
我有以下对象,即用于分组和排序的列名
List<Group> groupList;
List<Sort> sortList;
DataTable reportData; // Here im having the entire records from db
我逐行循环"reportData",并匹配当前行和前一行以进行自定义分组和排序。想知道当我们使用批处理执行或有任何替代解决方案时,如何做到这一点吗?
我需要对结果记录进行排序和分组im存储在数据表中(在一次执行中)并在其中循环用于对其进行分组和排序。
为什么?
说真的。
不要拉,然后试着用一个愚蠢的对象模型来解释智能(对不起,数据集不是特别智能)。
在选择语句中进行分组和排序,提取已经分组和连接的数据,然后处理它。
17年前,当原始版本发布时(4.2是sysase-sql server的端口),一百万条记录只是sql server的少量数据。如今,它很可能适合处理器级缓存,而不是一个合适的sql服务器,甚至意识到它刚刚处理过。
SQL是一个特别好的广告项目,因为它们支持MARS,所以你甚至可以在一个连接上运行多个查询,这在这里很方便。
因此,返回-丢弃数据集和"我试图编程一个排序算法",并创建适当的SQL语句来根据需要提取数据。
听起来应该实现分区修剪。分区将允许像您请求的那样对内容进行分离,以便进行更快的查询。
如果我理解正确,在您的情况下,我会创建一个临时数据库表,该表具有我特别想要的结构,以覆盖我的分组。
然后,我会从主表中选择记录,并将它们插入到临时表中,应用包括分组在内的所有修改。
还应该应用关于您希望它们如何排序的特定索引。
之后,只需从该表中进行选择,执行您必须执行的操作,最后,如果不再需要数据,则删除临时表。
我会选择上面的解决方案,因为内存中有一百万条记录对我来说很麻烦…
例如:
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);
等等。。。
但我仍然不鼓励在应用程序中添加数百万行。这将耗费内存。当然,有一些方法可以通过存储过程等来管理它。