SQL SERVER:在ONCE上加载数据还是逐个检查?

时间:2016-02-05 06:42:11

标签: sql-server vb.net

哪一个可能是更好的做法?在我的情况下,我需要检查表中是否存在特定数据。我正在迭代 Excel 文件并使用 VB.NET 验证我的表中是否存在代码。我有两个选项可以做到这一点(或者如果有更好的方法可以做到这一点,我愿意接受建议)。

首先是逐个检查,每个循环执行此代码:

SQL = "SELECT TOP 1 * FROM Table1 WHERE Code = '" & codeFromExcel & "'"
rs = dbConn.Execute(SQL)

If Not rs.EOF Then
    isFound = True
Else
    isFound = False
End If

另一个是我在 List(Of T)中加载所有代码

Dim myList As New List(Of String)()
rs = Nothing
rs = dbConn.Execute("Select Code from Table1")
If Not rs.EOF Then
     Do While Not rs.EOF
        myList.Add(rs.Fields("Code").Value.ToString)
        rs.MoveNext()
     Loop
End If

然后在Excel中迭代时检查每条记录是否在 List(Of T)中。

If myList.Contains(codeFromExcel) Then
     isFound = True
Else
     isFound = False
End If

我大部分时间都在使用这种东西,我想知道哪种方法最有效。目前我的数据库中只有几条记录。当我需要处理大量记录时,我希望我的代码准备好并且高效。提前谢谢!

其他信息:数据不需要" 新鲜"因为该表仅用于一次性输入。

1 个答案:

答案 0 :(得分:1)

我个人更喜欢打开尽可能少的数据库连接。

所以:

如果表格不是很大(几百行),我会使用“缓存”选项。

一般而言:
我会在列表中收集所有excel代码。 (excelCodes)

然后我会查询类似Select Distinct Code from Table1 Where Code In ( excelCodesList )的内容并将其存储在第二个列表(foundCodes)中。

然后我会比较这些列表。

我在 6.143.993 行的表格上进行测试。

只选择一个列(描述)到“缓存”花了1'29“。

另一方面查询如下:

select distinct description from ItemDetail where description in ( 'abc','cddd','xxx' )

花了0'58“。

<强>更新
Code列上的索引可能有助于提升效果。