当前位置: 首页 > 知识库问答 >
问题:

优化n^2循环内的合并查询

魏明亮
2023-03-14

我有一个合并查询,需要对request ArrayList中的day和sessionType的每个组合执行一次。我正在使用nativeQuery来执行它。

MERGE INTO TABLE_A A
    USING 
    (
    SELECT
    :description AS DESCRIPTION,
    :sessionType AS SESSION_TYPE,
    :day AS DAY,
    :flag1 AS FLAG1,
    :flag2 AS FLAG2,
    FROM DUAL) AS SOURCE
    ON (SOURCE.DESCRIPTION=
        A.DESCRIPTION AND SOURCE.DAY=
        A.DAY
        )
    WHEN MATCHED THEN
        UPDATE SET 
        FLAG1=SOURCE.FLAG1,
        FLAG2=SOURCE.FLAG2  
    WHEN NOT MATCHED THEN
        INSERT (
        DESCRIPTION,
        SESSION_TYPE,
        DAY,
        FLAG1,
        FLAG2
        )
        VALUES (
        SOURCE.DESCRIPTION,
        SOURCE.SESSION_TYPE,
        SOURCE.DAY,
        SOURCE.FLAG1,
        SOURCE.FLAG2    
        );

共有1个答案

景嘉实
2023-03-14

>

  • 您可以使用executebatch:在这种情况下,oracle会自动在输入数组上执行sql语句

    您可以绑定一个集合并在table()中使用它,如下所示:

    MERGE INTO TABLE_A A
        USING 
        (
        SELECT *
        FROM table(:bind_collection)
        ) AS SOURCE
        ON (SOURCE.DESCRIPTION=
            A.DESCRIPTION AND SOURCE.DAY=
            A.DAY
            )
        WHEN MATCHED THEN
            UPDATE SET 
            FLAG1=SOURCE.FLAG1,
            FLAG2=SOURCE.FLAG2  
        WHEN NOT MATCHED THEN
        ...
    

  •  类似资料:
    • 问题内容: 我使用java for循环进行了一些运行时测试,并发现了一种奇怪的行为。对于我的代码,我需要原始类型(例如int,double等)的包装对象来模拟io和输出参数,但这不是重点。只是看我的代码。具有字段访问权限的对象如何比原始类型更快? 优先类型的循环: 结果: MicroTime原语(最大值:= 10000.0):110 MicroTime原语(最大值:= 100000.0):1081

    • 有时候你会遇到循环,或者递归函数,它们会花费很长的执行时间,可能是你的产品的瓶颈。在你尝试使循环变得快一点之前,花几分钟考虑是否有可能把它整个移除掉,有没有一个不同的算法?你可以在计算时做一些其他的事情吗?如果你不能找到一个方法去绕开它,你可以优化这个循环了。这是很简单的,move stuff out。最后,这不仅需要智慧而且需要理解每一种语句和表达式的开销。这里是一些建议: 删除浮点运算操作。

    • You might notice after requiring React JS into your project that the time it takes from a save to a finished rebundle of your application takes more time. In development you ideally want from 200-800

    • 主要内容:UnionFind3.java 文件代码:上一小节介绍了并查集基于 size 的优化,但是某些场景下,也会存在某些问题,如下图所示,操作 union(4,2)。 根据上一小节,size 的优化,元素少的集合根节点指向元素多的根节点。操完后,层数变为4,比之前增多了一层,如下图所示: 由此可知,依靠集合的 size 判断指向并不是完全正确的,更准确的是,根据两个集合层数,具体判断根节点的指向,层数少的集合根节点指向层数多的集合根节点,如下图

    • 主要内容:UnionFind3.java 文件代码:按照上一小节的思路,我们把如下图所示的并查集,进行 union(4,9) 操作。 合并操作后的结构为: 可以发现,这个结构的树的层相对较高,若此时元素数量增多,这样产生的消耗就会相对较大。解决这个问题其实很简单,在进行具体指向操作的时候先进行判断,把元素少的集合根节点指向元素多的根节点,能更高概率的生成一个层数比较低的树。 构造并查集的时候需要多一个参数,sz 数组,sz[i] 表示以 i 为根的

    • 我有一个任务来优化for循环,以便编译器编译运行更快的代码。目标是使代码在 5 秒或更短的时间内运行,原始运行时间约为 23 秒。原始代码如下所示: 我的第一个想法是在内部for循环上进行循环展开,使它降到5.7秒,循环看起来像这样: 在每个循环的阵列中将其取出12个点后,性能不再增加,所以我的下一个想法是尝试引入一些并行性,所以我做了这个: 这实际上最终减慢了代码的速度,并且每个附加变量再次减慢