有关Oracle Arrays(集合)的性能相关问题

时间:2015-03-17 13:01:07

标签: sql oracle jdbc

为了能够实现诸如

之类的查询
"select * from table1 where id in [some set of elements]" 

我使用的是Oracle数组。我发现性能非常好。让我们说ids是整数。所以我将创建一个数组类型:

create type number_varray as varray([size]) of int;

然后我可以使用准备好的声明

select * from table1 where id in (select * from Table(?))

将参数设置为Array类型。 我有几个问题:

  1. 如果我的尺寸非常大,那么如果查询中的元素数量很小,会有性能损失吗?
  2. 尺寸限制是什么?
  3. 当我调用conn.createOracleArray(字符串名称,Obj []元素)它是否会命中服务器或执行查询后是否满意?
  4. 在Oracle中实现此类查询是否有更有效的方法?

1 个答案:

答案 0 :(得分:1)

实际上这不止一个问题,但我会尝试一下:

  1. 如果你看一下答案4
  2. ,表现并不会太糟糕
  3. 根据this article限制是65536,但我相信如果你超过这个数字你会做错事。使用临时表或类似的东西
  4. 在我看来,这并没有真正连接到Oracle数组......
  5. 使用member of,这是一种更有效的方式:

    select * from table1 where id member of my_number_varray;