加速可能会或可能不会返回结果的大量SELECT查询

时间:2018-10-19 17:52:18

标签: java sql spring oracle jdbc

我有这个查询:

“从+证券表+“位置(ISIN =?或CUSIP =?或SEDOL =?)中选择SECURITY_ID”

我需要执行约5万次。行在where子句中可能具有1、2或全部3个值,并且某些查询将不返回任何结果。对于返回的行,我需要知道它们匹配的ISIN / CUSIP / SEDOL,并且我需要知道哪些没有结果,以便稍后将它们插入表中。

我现在假设这非常慢,因为要分别进行50k查询的往返时间。在跟踪结果所针对的查询以及结果为空的查询中,有什么办法可以批量进行?

1 个答案:

答案 0 :(得分:3)

创建一个临时表,而不是进行50k选择,将您的ISIN,CUSIP和SEDOL批量加载到其中,然后在该表上join。然后一次性获取结果。这样就可以进行3次网络传输,而不是5万次。

或者,将语句重组为... where ISIN in ('DE...','DE...',...),但是大多数查询作为查询字符串的长度不能超过32k字节。这种方法仍需要进行一些批处理。

此外,理想情况下,您的证券列表已经存在于数据库中,因此您可以将其选择到临时表中,也可以将这些表直接与其他信息结合起来。