gpt4 book ai didi

java - 提高 JDBC 查询的性能 - ArrayList 比较

转载 作者:行者123 更新时间:2023-12-01 19:06:53 25 4
gpt4 key购买 nike

我一直在尝试找到最有效的方法来从数据库获取一组值并将它们与各自的子字符串进行比较以保存特定值...这是一个示例:
我有一个包含产品(ID)的表,来自 LVL - 7 中的值,我必须对这些值进行子串,直到达到 LVL1

LVL     PRODUCT          DESCRIPTION
5 01AR2TGELL DESLVL5
6 01AR2TGELLGS DESLVL6
7 01AR2TGELLGSQKA DESLVL7
6 01AR2TGELLDE DESLVL6
7 01AR2TGELLDEUDP DESLVL7
7 01AR2TGELLDEUZN DESLVL7

所以我可以得到这样的东西:

LVL   PRODUCT          DESCRIPTION  | LVL   PRODUCT        DESCRIPTION  | LVL  PRODUCT     DESCRIPTION
7 01AR2TGELLGSQKA DESLVL7 | 6 01AR2TGELLGS DESLVL6 | 5 01AR2TGELL DESLVL5
7 01AR2TGELLDEUDP DESLVL7 | 6 01AR2TGELLDE DESLVL6 | 5 01AR2TGELL DESLVL5
7 01AR2TGELLDEUZN DESLVL7 | 6 01AR2TGELLDE DESLVL6 | 5 01AR2TGELL DESLVL5

我正在使用 Java(要求),并且我正在使用 JDBC 连接到 Oracle DB。我所做的是通过查询从 LVL7 获取所有值,并将所有这些值保存在 ArrayList 中,然后使用 LVL 和 PRODUCT 子字符串的值比较这些值,如下所示:

"select * from PRODHIERARCHY where LVL=7"
"select * from PRODHIERARCHY WHERE LVL= 6 AND PRODUCT_HIERARCHY="+"'"+descLv7.get(j).substring(0, descLv7.get(j).length() - 4)+"'"

我的问题是,大约有。 35,000 个 LVL7 值,总共大约 65,000 个,所以效率非常低。 (获取 35000 个 LVL7 值大约需要 3 分钟,因为数据库正在处理所有内容,当与 ArrayList 进行比较时,每个 LVL 大约需要 30 分钟)。

任何人都可以向我推荐一种修改查询或比较过程的方法,以便它与第一个查询花费大约相同的时间吗?谢谢!

最佳答案

注意:我没有Oracle,所以我用MSSQL制作,只需使用substr而不是left作为人工键.

这是一个静态的想法。让我们看看,首先让我们创建一个包含一些计算列(人工键)的 View (或者您可以将它们添加到产品表中并为其建立索引)

create view vw_product_computed as
select
a.lvl,
a.Product,
left(a.product, 12) as a12, -- your first lelvel down (artificial key)
left(a.product, 10) as a10 -- your seccond level down (artificial key)
from
products a;

然后只需使用人工键将产品表与 View 连接起来即可:

select
*
from
desarrollo.vw_product_computed a
join dbo.products b on b.product = a.a12
join dbo.products c on c.product = a.a10
where
a.lvl = 7;

然后就可以得到所需的结果集: Join Result

如果你想让它成为一个动态的东西,我想数据透视表可能会派上用场。

希望这对交配有所帮助。

关于java - 提高 JDBC 查询的性能 - ArrayList 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59535557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com