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

标签 java sql performance jdbc

我一直在尝试找到最有效的方法来从数据库获取一组值并将它们与各自的子字符串进行比较以保存特定值...这是一个示例:
我有一个包含产品(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/

相关文章:

java - 微软图形 : Requesting an Extension returns http 400 bad request

sql - 如何在 informix 中创建触发器?

sql - 不同的查询,相同的结果(看起来),完全不同的性能......为什么?

javascript - 关于多个 facebook Json 请求的性能建议

c# - 修改字典值而不分配

java - 使用比较器对表进行排序,其中 "pins"项位于顶部

java - JTDS 驱动程序过时了吗?

java - 如何防止标签被替换?

php - 在opencart中将商店id添加到产品导出中(mysql查询)

postgresql - PostgreSQL 中的 "buffer"有多大