从ID所在的位置(我的程序的数组)进行选择

本文关键字:数组 选择 行选 程序 ID 位置 我的 | 更新日期: 2023-09-27 17:57:56

我想从我的表中获得一个基于ID的项目列表。我需要选择的ID列表包含在我的程序中的数组或字典中。

因此,与其使用大量查询:

从tblData中选择*,其中ID=1

从tblData中选择*,其中ID=3

从tblData中选择*,其中ID=9

从tblData中选择*,其中ID=15

(此处为千条记录)从tblData中选择*,其中ID=50000

从tblData中选择*,其中ID=50100

由于需要运行太多查询,因此性能非常差。还有其他更聪明的方法吗?

从ID所在的位置(我的程序的数组)进行选择

Where条件下使用In

Dim sIDs As String
For Each sID As String In dic.Keys
    sIDs += sID + ","
Next
'Remove last comma
sIDs = sIDs.Substring(0,sIDs.Length-1)
Dim sql As String = "Select * from tblData where ID In (" + sIDs + ")"

现在您可以执行这个sql并使用sql适配器填充数据表

如果值存储在Array中,则可以使用String。使用in语句联接并将其放置在sql查询中。

Dim sIDs As String = String.Join(",", arrID)
Dim sql As String = "Select * from tblData where ID In (" + sIDs + ")"

不要使用Select *,而是使用显式列Select Column1, Column2。。。

根据您的表/db结构和数据,尝试不同的解决方案可能会获得一定的速度:

  1. 使用WHERE ID BETWEEN min_sId AND max_sId选择所有记录(因此在ID上有一个限制过滤器),然后排除不需要的记录。(我可能会使用这个解决方案)

  2. 使用一个临时表,首先插入您的ID,然后在临时表上使用INNER JOIN从tblData中进行选择(我认为这不会更快,因为您需要在加入前将所有ID插入表中)

我也会考虑改变我的界面逻辑,如果我的用户可以选择50.000个元素,听起来就不太对劲了。