如何在C#中从DB中对多个排序数据集进行排序?

时间:2011-09-25 13:08:39

标签: c# sql-server partitioning

我在SQL SERVER中有一个分区表,ID上有一个聚簇索引,该表由period_key分区。 ID在分区内是唯一的,但不是唯一的交叉分区。我需要的是找到所有唯一ID。最简单的方法就是使用

select unique ID from tab

但是需要对需要退出大量临时磁盘的数据库中的数据库进行排序,因此需要大量的磁盘IO。由于系统已经IO限制,我正在考虑削减磁盘IO。由于我们可以通过使用集群索引按顺序读取每个分区,假设我们有10个分区,我们可以从每个分区读取一行,然后比较它们,并输出带有min ID的记录,比如来自分区X,然后读取分区X的下一行。再次比较这10行,输出记录和最小ID等。就像外部排序一样。

我没有C#的经验,但知道java。谁能让我知道如何在c#中实现它?

1 个答案:

答案 0 :(得分:1)

好的,如果要求是绕过数据库服务器端的排序,而不是客户端ID是否唯一,那么你可以这样做 - 选择所有ID值(没有明显的查询):

SELECT ID FROM tab

然后遍历所有值,将它们添加到List。完成后,您可以要求列表返回其自身的版本,并删除重复项。这是一个简单的例子:

List<int> allIDs = new List<int>();
foreach (DataRow row in someDataSet.Tables[0].Rows)
{
    allIDs.Add((int) row["ID"]);
}
List<int> uniqueIDs = allIDs.Distinct();

免责声明 - 我把它写在了我的头顶,所以它可能包含错误。 This post包含基于HashSet的更快实施。