锁定老帖子 主题:发疯Hibernate分页问题,性能优化!
精华帖 (2) :: 良好帖 (0) :: 新手帖 (18) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-28
Unmi 写道 移除 order by 语句时用的代码是
Pattern pattern = Pattern.compile("order\\s*by[\\w|\\W|\\s|\\S]*" , Pattern.CASE_INSENSITIVE); 如果是子查询里有 order by 语句,岂不是会从子查询的 order by 开始全部截掉,包括主查询的条件。 是啊,所以说SpringSide的代码的参考价值很高啊,呵呵。 |
|
返回顶楼 | |
发表时间:2008-07-29
Unmi 写道 移除 order by 语句时用的代码是
Pattern pattern = Pattern.compile("order\\s*by[\\w|\\W|\\s|\\S]*" , Pattern.CASE_INSENSITIVE); 如果是子查询里有 order by 语句,岂不是会从子查询的 order by 开始全部截掉,包括主查询的条件。 为什么要把order by加到子查询里? |
|
返回顶楼 | |
发表时间:2008-07-29
我的建议:
1、就是看看有没索引,这个设置好了 查询速度可以提高不少 2、对于count的问题,我曾经这样做过 就是另写一个针对count的查询,理由是原来的查询基于hibernate的 有可能生成的sql过于繁琐,可能存在多表查询,当查询条件不针对于其它表的时候,完全可以改写为有一个对应的简便的sql查询。当然具体情况具体分析,在此我只是提出还有这样一种解决方案存在。 |
|
返回顶楼 | |
发表时间:2008-07-29
count(*)? 有没有试过count(primary_key)?有一些数据库对count(*)会很慢的,postgresql几乎不对count(*)作任何优化,慢到要死,但换成count(pk)就飞快。
|
|
返回顶楼 | |
发表时间:2008-07-29
第一次检索都要计算count值,传到页面做缓存;
from 表 发生变化,如join不同的表 也要重新计算count; from表或者多表有增删操作,使用aop通知Pager重新计算count; |
|
返回顶楼 | |
发表时间:2008-07-30
select count(1) from ..... 应该会好一点吧
|
|
返回顶楼 | |
发表时间:2008-07-31
bhan2008 写道 select count(1) from ..... 应该会好一点吧
在Oracle下,count(1)和count(*)同样高效,其他数据库的效率不清楚,只要数据库优化,可能是也是一样的。 参考自 http://www.itpub.net/viewthread.php?tid=592976&extra=&page=3 |
|
返回顶楼 | |
发表时间:2008-07-31
mysql数据库里面select count(*)时不能在条件里面加子查询,否则速度超级慢。
|
|
返回顶楼 | |
发表时间:2008-07-31
count(*) 有性能问题? 优化数据库看看~~
|
|
返回顶楼 | |
发表时间:2008-08-01
根据业务来.数据量小,就count(*),量大就改策略如提前缓存.
|
|
返回顶楼 | |