缩短SQL查询执行时间

时间:2018-07-09 13:01:42

标签: c# sql-server winforms

我有一个dataGridView,它显示表中的数据,将这些数据导出为xml文件后,将唯一字段添加到另一个表中,这样我就只能显示未导出的数据。

我如何仅显示尚未导出的数据:

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    SqlCommand queryLocal = new SqlCommand("SELECT *uniqueField* FROM myTable 
WHERE *uniqueField* = " + dataGridView1.Rows[i].Cells[3].Value.ToString().Trim().Replace("'","''"), con);
    var reader = queryLocal.ExecuteReader();
    if (reader.Read())
    {
        dataGridView1.Rows.RemoveAt(i);
        i--;
    }
    reader.Close();
}

问题在于,过滤少于400行需要花费20秒钟以上的时间。 我如何在这里提高性能?

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

SqlCommand queryLocal = new SqlCommand("SELECT DISTINCT *uniqueField* FROM myTable");
var reader = queryLocal.ExecuteReader();

List<string> uniqueFields = new List<string>();
while (reader.Read())
    uniqueFields.Add(reader[0]);
reader.Close();

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    if (uniqueFields.Contains(dataGridView1.Rows[i])
    {
        dataGridView1.Rows.RemoveAt(i);
        i--;
    }
}