从其中 ID 中选择(我的程序的数组)

Posted

技术标签:

【中文标题】从其中 ID 中选择(我的程序的数组)【英文标题】:Select from where ID in (an array of my program) 【发布时间】:2014-04-12 06:40:06 【问题描述】:

我想根据它的 ID 从我的表中获取项目列表。我需要选择的 ID 列表包含在我的程序的数组或字典中。

所以不要使用大量查询:

从 ID=1 的 tblData 中选择 *

从 ID=3 的 tblData 中选择 *

从 ID=9 的 tblData 中选择 *

从 ID=15 的 tblData 中选择 *

...(这里有数千条记录)Select * from tblData where ID=50000

从 ID=50100 的 tblData 中选择 *

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

【问题讨论】:

使用 sql join 获得连击性能。 你在不同的桌子上有这个特定的列表吗? @Angel_Boy 不,它只是存储在我的程序数组中。因为用户通过突出显示从我的程序中选择要显示的记录。 【参考方案1】:

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 并填充数据表

如果值存储在数组中,那么您可以使用 String.Join 并将其放在带有 in 语句的 sql 查询中。

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

【讨论】:

一行For Each是有效的vb.net代码吗?或者关闭Next需要添加 感谢@Fabio 指出更正。需要添加下一个。 @Nimesh 谢谢你的回答,我花了大约 8 秒的时间来选择 17000 个项目和你的解决方案。如果我选择所有表格并与字典进行比较,则只需 3 秒。所以你的答案现在也不是更好。 你使用的是字典还是数组? 这也取决于您的数据结构。您在您的表上创建了什么类型的索引以及您当前使用什么方法。请在您的问题中提及。【参考方案2】:

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

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

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

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

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

【讨论】:

以上是关于从其中 ID 中选择(我的程序的数组)的主要内容,如果未能解决你的问题,请参考以下文章

如何修复内存泄漏?

如何从我的 iPhone App 文档目录中选择所有图像

c# - 从对象数组中检索一个值

在Vuejs / Java应用程序中选择未定义的对象数组中的特定对象

根据JavaScript中的属性值从对象数组中选择[重复]

当用户单击按钮时从数组中删除对象