【发布时间】:2021-10-13 23:59:13
【问题描述】:
我正在尝试使用 SQL 在值列表中查找一个值,因此我尝试使用以下内容:
SELECT * FROM TABLE_EXAMPLE WHERE FIELD_EXAMPLE IN ('1', '2', '3', '4', '5', ...)
我正在搜索的值列表有大约 84k 个元素,因此我不能使用这种类型的查询,因为列表太大,我会收到错误消息。
即使在非常大的列表中搜索,是否有一种有效的方法来执行此类查询?
我实施的解决方案是将查询分解为更简单的查询,所以我最终得到了这样的结果:
select * from table_example where field_example = '1';
select * from table_example where field_example = '2';
select * from table_example where field_example = '3';
select * from table_example where field_example = '4';
select * from table_example where field_example = '5';
等等……
【问题讨论】:
-
将列表加载到表中,使用
JOIN等SQL操作。 -
@GordonLinoff 是对的;这是唯一合理的方法。如您所知,
IN(子句仅限于 256 个元素,因此除非您嵌套一大堆元素,否则不是一个选项。如果您的 84,000 个元素位于与 Oracle 数据库位于同一服务器上的平面文件中,并且它采用合理的格式,例如 CSV 或固定长度等,您可以使用外部表将其视为是一个数据库表并加入它。如果是这样,edit 您的问题并显示该文件中的一些示例行。还要为您的版本添加一个版本标签,例如 [oracle12c]。
标签: sql oracle performance