Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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# 优化删除SQL查询多个数据组合的运行时_C#_Sql_Sql Delete - Fatal编程技术网

C# 优化删除SQL查询多个数据组合的运行时

C# 优化删除SQL查询多个数据组合的运行时,c#,sql,sql-delete,C#,Sql,Sql Delete,我使用的是本地Access数据库和远程SQL Server数据库 我总是将结果保存在本地数据库上,然后本地计算机不在使用我将此数据传输到远程服务器并清除本地数据 数据副本到服务器的查询运行正常 对于3000行数据,它需要100毫秒或更少的时间,这很好 但是当我试图从本地机器上删除数据时,大约需要3秒钟 而数据可能是大约20K行的数据,那么它可能需要很多时间 Datatable表是我想按ReportNumber和NumberTest删除的行 例如,我有报告1和报告1,2,3,4,5,6中的数据数。

我使用的是本地Access数据库和远程SQL Server数据库

我总是将结果保存在本地数据库上,然后本地计算机不在使用我将此数据传输到远程服务器并清除本地数据

数据副本到服务器的查询运行正常

对于3000行数据,它需要100毫秒或更少的时间,这很好 但是当我试图从本地机器上删除数据时,大约需要3秒钟

而数据可能是大约20K行的数据,那么它可能需要很多时间

Datatable表是我想按ReportNumber和NumberTest删除的行

例如,我有报告1和报告1,2,3,4,5,6中的数据数。。。 报告2和报告1、2、3、4、5、6中的数据

测试的数量可以达到20K甚至更多

我假设在total表中,一次运行不会超过50K

有没有办法优化我的查询

这是我的删除SQL方法:

public void ClearLocalResult(OleDbConnection openCon, DataTable table)
        {
            try
            {
                Stopwatch stopwatch = Stopwatch.StartNew();

                for (int i = 0; i < table.Rows.Count; i++)
                {
                    try
                    {

                        string query = $"DELETE FROM [Result] where [ReportNumber]=@NumberInTest AND [NumberInTest]=@ReportNumber";

                        OleDbCommand cmd = new OleDbCommand(query, openCon);

                        cmd.Parameters.AddWithValue($"@ReportNumber", table.Rows[i]["ReportNumber"].ToString());
                        cmd.Parameters.AddWithValue($"@NumberInTest", table.Rows[i]["NumberInTest"].ToString());

                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        LocalPulserDBManagerInstance.WriteLog(ex.StackTrace, ex.Message);
                        throw ex;
                    }
                }
                stopwatch.Stop();
                long time = stopwatch.ElapsedMilliseconds;

            }
            catch (Exception ex)
            {
                LocalPulserDBManagerInstance.WriteLog(ex.StackTrace, ex.Message);
                throw ex;
            }
        }
public void ClearLocalResult(OleDbConnection openCon,DataTable)
{
尝试
{
秒表秒表=Stopwatch.StartNew();
for(int i=0;i
通常,SQL中的
DELETE
语句非常昂贵。我不确定特定于MS Access的实现,但如果情况也是这样,我也不会感到惊讶。我会优化您的体系结构,而不是试图加快删除速度。为什么要将Access DB同步到远程SQL Server,而不是直接使用它?因为这可能是一个网络问题,我不想在网络关闭时停止工作…可能没有简单的解决方案。代码所做的唯一一件事就是删除行,与其他RDBMS一样,这需要一段时间。实际上没有什么需要优化的。一般来说,插入和更新速度更快;您可以跟踪已复制的行,而不向用户显示它们,基本上是逻辑删除或软删除。然后,在系统不忙的时候(晚上),对逻辑上已删除的任何内容执行delete语句。但是,这又增加了编码开销。我想,也许有任何方法可以将这个查询合并到一个查询中,或者对于50K行,合并到少于50K的查询中。你怎么认为?或者可以使用表单而不是条件的位置来更改查询?认为它可以更快是有道理的?