Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
SQL/JPQL/JPA的最快子查询方法_Sql_Jpa_Criteria_Jpql - Fatal编程技术网

SQL/JPQL/JPA的最快子查询方法

SQL/JPQL/JPA的最快子查询方法,sql,jpa,criteria,jpql,Sql,Jpa,Criteria,Jpql,正如您在这个问题中所看到的,有一种方法用于带有条件API的子查询: SELECT e FROM Employee e WHERE e IN (SELECT emp FROM Project p JOIN p.employees emp WHERE p.name = :project) 但是,像这样简单地查询如何: SELECT e FROM Employee e WHERE e.project.name = :project 哪一个更快?为什么

正如您在这个问题中所看到的,有一种方法用于带有条件API的子查询:

SELECT e 
FROM Employee e 
WHERE e IN (SELECT emp
          FROM Project p JOIN p.employees emp 
         WHERE p.name = :project)
但是,像这样简单地查询如何:

SELECT e 
FROM Employee e 
WHERE e.project.name = :project

哪一个更快?为什么?

您必须进行测量,但我不认为第二个会比第一个慢,因为它基本上与第一个的子查询相同。当简单的东西做同样的事情时,为什么要使用复杂的东西呢?因为我认为数据库可以缓存第二部分的结果,而对于第二个查询,这是不可能的,或者可能也是!!!依赖于ORM行为