如何管理一百万条记录?

时间:2012-04-06 04:25:54

标签: c# mysql sql-server sql-server-2008

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

以下是该方案:

我使用sql select查询来检索一百万条记录。 我需要对结果记录执行排序和分组,这些记录存储在数据表中(在一次执行中) 并循环通过它进行分组和排序。 我知道这是如此幼稚,而不是处理它的正确方法。 如何有效管理百万条记录并对其进行分组和排序?

真的需要帮助。听说批处理执行选择查询,但是如果我们手头没有整个数据,如何实现分组和排序? 我不能直接去sql order by和group by,这违背了我的要求。

以下是我现在正在做的事情:

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

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

我逐行循环遍历'reportData',并匹配自定义分组和排序的当前行和上一行。想知道当我们使用批处理执行或任何替代解决方案时,如何做同样的事情?

4 个答案:

答案 0 :(得分:3)

  

我需要对结果记录执行排序和分组   即存储在数据表中(在一次执行中)并循环通过它   用于分组和排序。

为什么?

严重。

不要拉,然后尝试使用后面的愚蠢对象模型智能化(并且数据集不是特别聪明,抱歉)。

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

一百万条记录是sql server的一小部分数据,当原始版本发布时(4.2,它是sysase sql server的一个端口)17年前。这些天它可能很适合处理器的三层缓存,并且没有什么是正确的SQL服务器甚至意识到它刚刚处理过。

SQL是做项目的特别好的广告,自从他们引入MARS后,你甚至可以通过一个连接运行多个查询,这在这里很方便。

所以,回去 - 抛弃数据集和“我尝试编写排序算法”并创建适当的SQL语句以根据需要提取数据。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

然后我会从主表中选择记录并将它们插入到临时表中,包括所有修改,包括分组。

还应该应用关于如何排序的特定索引。

之后,只需从此表中选择,执行您必须执行的操作,最后如果不再需要数据,请删除临时表。

我会选择上面的解决方案,因为内存中有数百万条记录给我带来麻烦......

答案 3 :(得分:-1)

例如:

<强> 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);

等等......

但我仍然不鼓励将数百万行用于应用程序。它将耗费内存。当然有办法通过存储过程等来管理它。