锁定老帖子 主题:springside学习中遇到的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-29
无论怎么看,只要是没有做SQL语法解析的,都可能出问题,还得找ajoo的JRC,look:http://www.iteye.com/topic/21903
|
|
返回顶楼 | |
发表时间:2006-12-29
关键他修改的是hql的查询语句,而不是sql的查询,hql是不支持象
select ... from (select ...) 这样的子查询的,hql好象只能在where条件中使用子查询. |
|
返回顶楼 | |
发表时间:2006-12-29
后来证实了一些想法,lz说的嵌套子查询的效率是没有问题的,40w条数据两种查询方式的差距在0.01s以内。
如果按照我所说,干掉group by这样的汇总条件,是会导致结果集数量变化的。所以只能干掉order by,而保留group by. 保留group by 必须保持原有select .....from .. where .. group by...。 所以为了解决这个问题,只有使用select count(*) from (select ... from .. where.. )才是正道。 我从一开始就没有完全理解lz的意思,多包含。 |
|
返回顶楼 | |
发表时间:2006-12-30
可是就我现在看到的好几个封装都是像我帖的这样的(springside,feling的一个帖子里的(http://www.iteye.com/topic/14657),俺们公司用的。。。),我怀疑是不是有些道理在里面,所以希望有达人指点下呀,这个东西应该是每个项目很基础的东西,不知道怎么回事回答的人却没有:(
|
|
返回顶楼 | |
发表时间:2006-12-30
1> oracle 8i 以前的版本就不支持在子查询中使用order by。
2> select count(*) from table_a 和 select count(*) from table_a order by field_c 或者 select count(*) from (select * from xxx ) 性能上的差距有的时候会达到几十或者上百的数量级。随着数据量,索引字段,数据的分布,服务器的配置有很大的不同,简单的试验不具有代表性 确实count(*)怎么算出来是很难一下子搞清楚的,比如说使用了union等集合操作,那么就不能简单地删除from前面的子句。(不过HQL 好像不支持union) |
|
返回顶楼 | |
发表时间:2006-12-30
不知道各位用的这一层的dao是封装成什么样子的?有没有朋友可以发上来看看呢。
|
|
返回顶楼 | |
发表时间:2006-12-30
上面不是说了嘛,hibernate的hql不支持这样的查询
select ... from (select ...) 没人看到?所以只有使用楼主一开始说的方法,并不是效率方面的考虑。 |
|
返回顶楼 | |
发表时间:2006-12-30
janh 写道 上面不是说了嘛,hibernate的hql不支持这样的查询
hql是这样的,我说的是sql。
select ... from (select ...) 没人看到?所以只有使用楼主一开始说的方法,并不是效率方面的考虑。 |
|
返回顶楼 | |
发表时间:2006-12-30
我想应该有办法调用hibernate的api来生成sql,再对生成的sql进行修改,加上select count(*) from ... 去掉后面的order,用sql查询返回总数量,不知道有没有人做过。
|
|
返回顶楼 | |
发表时间:2006-12-31
jianfeng008cn 写道 ls的兄弟,还有数据库不支持这样的子查询?能否举个例子呀,我现在就用过oracle sqlServer mysql
记得informix好像不支持 |
|
返回顶楼 | |