C# 如何在C中对数据库中的多个已排序数据集进行排序?
我在SQL SERVER中有一个分区表,在ID上有一个聚集索引,并且该表是按period_键分区的。该ID在分区内是唯一的,但在跨分区时不是唯一的。我需要的是找到所有唯一的ID。最简单的方法就是使用C# 如何在C中对数据库中的多个已排序数据集进行排序?,c#,sql-server,partitioning,C#,Sql Server,Partitioning,我在SQL SERVER中有一个分区表,在ID上有一个聚集索引,并且该表是按period_键分区的。该ID在分区内是唯一的,但在跨分区时不是唯一的。我需要的是找到所有唯一的ID。最简单的方法就是使用 select unique ID from tab 但这需要对数据库中的数据库进行排序,数据库需要退出大量临时磁盘,因此需要大量磁盘IO。由于系统已经有IO限制,我正在考虑削减磁盘IO。因为我们可以使用集群索引按顺序读取每个分区,假设我们有10个分区,我们可以从每个分区中读取一行,然后比较它们,然
select unique ID from tab
但这需要对数据库中的数据库进行排序,数据库需要退出大量临时磁盘,因此需要大量磁盘IO。由于系统已经有IO限制,我正在考虑削减磁盘IO。因为我们可以使用集群索引按顺序读取每个分区,假设我们有10个分区,我们可以从每个分区中读取一行,然后比较它们,然后用最小ID输出记录,比如说从分区X,然后从分区X读取下一行。然后再比较这10行,用最小ID输出记录,等等,就像外部排序一样
我没有C语言的经验,但懂java。有人能告诉我如何在c中实现它吗?好的,如果要求绕过数据库服务器端的排序,而是在客户端确定ID是否唯一,您可以执行以下操作-选择查询中不明显的所有ID值:
SELECT ID FROM tab
然后循环遍历所有值,将它们添加到列表中。完成后,您可以要求列表返回一个已删除重复项的版本。这里有一个简单的例子:
List<int> allIDs = new List<int>();
foreach (DataRow row in someDataSet.Tables[0].Rows)
{
allIDs.Add((int) row["ID"]);
}
List<int> uniqueIDs = allIDs.Distinct();
免责声明-我把它写在我的头上,所以它可能包含错误。包含基于哈希集的更快的实现。好的,如果要求绕过数据库服务器端的排序,而是在客户端确定ID是否唯一,您可以执行以下操作-选择查询中不区分的所有ID值:
SELECT ID FROM tab
然后循环遍历所有值,将它们添加到列表中。完成后,您可以要求列表返回一个已删除重复项的版本。这里有一个简单的例子:
List<int> allIDs = new List<int>();
foreach (DataRow row in someDataSet.Tables[0].Rows)
{
allIDs.Add((int) row["ID"]);
}
List<int> uniqueIDs = allIDs.Distinct();
免责声明-我把它写在我的头上,所以它可能包含错误。包含基于哈希集的更快的实现。c在这里的作用是什么?您想要linq到sql解决方案吗?我很难想象一个对数据库进行多次往返的解决方案比一个在sql server中优化的查询要好。或者我没有领会你的意思?你想消除重复项,从选项卡中选择不同的ID,还是只想得到这些只出现一次的ID?c在这里的作用是什么?您想要linq到sql解决方案吗?我很难想象一个对数据库进行多次往返的解决方案比一个在sql server中优化的查询要好。或者我没有领会你的意思?你想消除重复项,从选项卡中选择不同的ID,还是只想得到这些只出现一次的ID?