繁体   English   中英

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

[英]how to sort multiple sorted data set from DB in C#?

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

select unique ID from tab

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

我没有C#的经验,但是了解Java。 谁能给我一些想法如何在C#中实现它?

OK,如果要求是绕过数据库服务器端的排序,而是确定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();

免责声明-我在头顶上写下了它,因此可能包含错误。 这篇文章包含一个基于HashSet的更快的实现。

暂无
暂无

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

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