Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate SQL查询执行SQL查询的时间比预期时间长_Java_Mysql_Sql_Hibernate - Fatal编程技术网

Java 使用Hibernate SQL查询执行SQL查询的时间比预期时间长

Java 使用Hibernate SQL查询执行SQL查询的时间比预期时间长,java,mysql,sql,hibernate,Java,Mysql,Sql,Hibernate,SQL查询有时会成为一个很难处理的问题。所以我有一个SQL查询,它由多个OR操作和正则表达式组成。在运行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'; 由于

SQL查询有时会成为一个很难处理的问题。所以我有一个SQL查询,它由多个OR操作和正则表达式组成。在运行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';
由于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作为参数。

运行
EXPLAIN
,它可以提供一些关于查询完成的数据过滤的输入。您也可以尝试使用
BETWEEN
作为
col3
条件。您是如何计算预期时间的?您是否直接对数据库运行了完全相同的查询?如果使用hibernate,就不必编写简单的sqlquery@XtremeBaumer请检查更新的问题。是的,运行相同的查询会在2秒内给出相同数据的结果。编写普通sql查询的原因是正则表达式,因为我找不到使用criterias或hql实现正则表达式的最佳方法。@AnkitaGoyal,这可能有效。或者你像这样扩展你的方言
(col1 REGEXP :list)
col1 REGEXP ('xyz'|'abc')
col1 IN ('xyz', 'abc')
(col1 = 'xyz' OR col1 = 'abc')