gpt4 book ai didi

java - SQL 查询执行时间比使用 Hibernate SQL Query 的预期时间长

转载 作者:行者123 更新时间:2023-11-29 03:20:30 24 4
gpt4 key购买 nike

SQL 查询有时会变得难以处理。所以我有一个包含多个 OR 操作和 REGEX 的 SQL 查询。在运行JAVA代码时,在大量数据条目上执行时间超过了预期时间。

下面是查询:

SELECT * FROM tableName WHERE (col1 REGEXP ('xyz'|'abc') OR (col2 = 15 AND (col1 REGEXP ('xyz'|'abc')))) AND col3>='2017-08-28' AND col3<='2017-08-30';

hibernate 代码:

public List<MyModel> getAllMatchedEntries() {
long lStartTime = new Date().getTime();
Query query = ((SQLQuery) getSession().createSQLQuery( "SELECT * FROM tableName WHERE (col1 REGEXP :list OR (col2 = 15 AND (col1 REGEXP :list))) AND col3>=:sd AND col3<=:ed"). setResultTransformer(Transformers.aliasToBean(LeadGenViewTable.class)).setParameter("list", regexlist).setParameter("mid", merchant_id).setParameter("todayDate", sd).setParameter("ed", ed));
List<MyModel> list = query.list();
long lEndTime = new Date().getTime();
long output = lEndTime - lStartTime;
list= list.stream().filter(distinctByKey(t -> t.getSomeCol())).collect(Collectors.toList());
System.out.println("Time Taken "+output);
return list;
}

并且令人惊讶地在日志中输出:

Time Taken 45616

由于 REGEXP/OR 操作,我很难弄清楚发生的时滞。帮助将不胜感激。

最佳答案

(col1 REGEXP :list OR (col2 = 15 AND (col1 REGEXP :list)))

相同
(col1 REGEXP :list)

col3 上有索引

并且通常可以更好地重写正则表达式 - 然后利用索引:

col1 REGEXP ('xyz'|'abc')
col1 IN ('xyz', 'abc')
(col1 = 'xyz' OR col1 = 'abc')

对于 IN 版本,可以使用 java.sql.Array 作为参数。

关于java - SQL 查询执行时间比使用 Hibernate SQL Query 的预期时间长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45957924/

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