Hibernate JPA-分页、计数(id)缓慢

Hibernate JPA-分页、计数(id)缓慢,hibernate,jpa,spring-data-jpa,informix,Hibernate,Jpa,Spring Data Jpa,Informix,我有一个REST应用程序,它有一个JPA查询来获取AllObject 运行下面的查询以获取getAll操作的结果集。对于myTable中的3200万行,我的DEV box需要49秒 select SKIP 200 FIRST 20 * from myTable table0_ order by id desc 然而,我的问题是JPA自动运行count(id)查询以获取分页数据。这个很慢,花了4分钟 select count(id) as col_0_0_ from

我有一个REST应用程序,它有一个JPA查询来获取AllObject

运行下面的查询以获取getAll操作的结果集。对于myTable中的3200万行,我的DEV box需要49秒

select
    SKIP 200 FIRST 20 *
from
    myTable table0_ 
order by
    id desc
然而,我的问题是JPA自动运行
count(id)
查询以获取分页数据。这个很慢,花了4分钟

select count(id) as col_0_0_ 
from myTable table0_ 
另外,
Id
是表上的主键,直接在DB上的查询本身需要14秒。不确定是否有东西在冬眠状态下减慢了速度


DB是Informix,如果这有什么区别的话。

计算行永远不会很快,而且依赖于rdbms。@Antoniosss同意。但是SpringJPA在内部为分页元数据做了这项工作。另外,我假设因为它使用了索引,所以它应该是更快的全扫描搜索。另外,正如我前面所说的,由于直接在DB上运行相同的查询速度更快,所以Hibernate中的某些东西使其速度变慢,因为
id
列是主键,它可能有一个NOTNULL约束,并且上面有一个唯一的索引。你能说服JPA运行
COUNT(*)
而不是
COUNT(id)
?您是否在
myTable
上运行了更新统计信息?如果是,您使用了哪些选项?哪个版本的Informix,运行在哪个平台上(o/s和版本)?表是否可能是易变的?也就是说,表中的行数是否变化很大?
COUNT(*)
vs
COUNT(id)
的意义在于后者必须为
id
计算非空值的行数,而前者是表中行数的元数据查找。您是否已检查索引是否正常(使用
oncheck
)?是否存在磁盘驱动器开始出现故障的危险?(可能不会,但人们知道更有趣的事情会减慢系统的速度。)。这些排有多宽?表中是否有BLOB、CLOB、字节或文本列?问题是什么?