Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中对数据库中的多个已排序数据集进行排序?_C#_Sql Server_Partitioning - Fatal编程技术网

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

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个分区,我们可以从每个分区中读取一行,然后比较它们,然

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

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?