将WHERE IN分成多个SELECTS

时间:2013-02-01 09:16:28

标签: sql

是否能够更好地执行以便将this WHERE IN分解为多个选项,例如

SELECT aField FROM aTable WHERE objectId IN (0,1,2...999) * many

与拥有巨大的WHERE objectId IN(700k项目)相比。

编辑---

我在内存中的objectIds列表,它可以多达700k项。它们可以是连续的,但不太可能。 也不确定where子句(在本例中为objectId)中的字段是否已编入索引。

允许我仅传递WHERE CLAUSE的第三方应用程序当前正在使用Oracle DB。它还有连接到其他类型DB的选项,但我正在开发的插件的用户群主要针对Oracle DB。

2 个答案:

答案 0 :(得分:0)

它更好阅读但更难调试,内部有趣的是哪一个更快,通常我会说具有ObjectID列表的选项,但是传输如此大量的数据也会花费一些性能,你可以根据我们的DBMS,使用Explain计划比较两种变体。

答案 1 :(得分:0)

多达70万件物品?如果是这种情况,我会认真考虑将这些存储在一个单独的表中并使用JOIN代替 - 如果objectId是索引的外键,那将会表现得更好。