浏览 2359 次
锁定老帖子 主题:hibernate隐含参数问题。
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-03
select aa from AA aa where docChannel = and proState = ? dtsStatus = ? 1.安全;2.可以预加载,速度快。因此项目中都用到了隐含参数。可是在应用的过程中,明显的带有隐含参数的 HQL语句有问题,在百万级的ORACLE数据库中很多出现超时现象,于是翻查资料发现,有一句话这么说: 如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。 说明即使在查询的列已经建立索引,还是会引起全表扫描。 再查找 超时的HQL语句,多数为带有子查询的隐含参数 语句,把隐参换成明参,速度立刻提升,大约比隐参提升有,40-100倍的速度。百思不得 其解。请大侠指教。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-09-03
请贴出有问题代码及HQL
|
|
返回顶楼 | |
发表时间:2007-09-10
隐参的效果是在数据库体现出来。
因为现在数据库都有缓冲池的概念。 用变量的sql可以避免硬解析。相似的sql可以提高查询速度 |
|
返回顶楼 | |