两个SQL语句,性能相差如此大

用Hibernate开发的应用,使用是Oracle10g,使用的方言是org.hibernate.dialect.OracleDialect

数据到达360W的时候,分页查询比较慢,达到10S多,分析了自动生成的SQL,发现SQL格式如下:
SELECT *
FROM (SELECT row_.*, ROWNUM rownum_
FROM (SELECT users.id,users.name
FROM my.users users0_) row_)
WHERE rownum_ <= 100 AND rownum_ > 10
将方言改为org.hibernate.dialect.Oracle10gDi生成的SQL是
SELECT *
FROM (SELECT row_.*, ROWNUM rownum_
FROM (SELECT users.id,users.name
FROM my.users users0_) row_ where rownum <= 100 )
WHERE rownum_ > 10。

速度很快。

发表评论