论坛首页 Java企业应用论坛

hibernate隐含参数问题。

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

跳转论坛:
Global site tag (gtag.js) - Google Analytics