当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

加快你的Hibernate引擎(下)[Java编程]

赞助商链接



  本文“加快你的Hibernate引擎(下)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

4.6 HQL调优

4.6.1 索引调优

HQL看起来和SQL很类似.从HQL的WHERE子句中普通可以猜到呼应的SQL WHERE子句.WHERE子句中的字段决意了数据库将挑选的索引.

大大都Hibernate开辟者所常犯的一个错误是无论什么时刻,当需求新WHERE子句的时刻城市成立一个新的索引.因为索引会带来额外的数据更新开销,所以应当争取成立少量索引来覆盖尽大概多的查询.

4.1节让你利用一个调集来处理全部大概的数据搜索条件.假如这不太实际,那么你可以利用后端解析工具来成立一个针对利用程序触及的全部 SQL的调集.基于那些搜索条件的分类,你终究会得到一个小的索引集.与此同时,还可以尝试向WHERE子句中增添额外的谓语来匹配其他WHERE子句.

典范7

有两个UI搜索器和一个后端保护进程搜索器来搜索名为iso_deals的表.第一个UI搜索器在unexpectedFlag、dealStatus、tradeDate和isold属性上有谓语.

第二个UI搜索器基于用户键入的过滤器,此中包含的内容除tradeDate和isold以外还有其他属性.开始时全部这些过滤器属性都是可选的.

后端搜索器基于isold、participantCode和transactionType属性.

经过进一步业务解析,发现第二个UI搜索器实际是基于一些隐式的unexpectedFlag和dealStatus值来挑选数据的.我们还让tradeDate成为过滤器的必要属性(为了利用数据库索引,每个搜索过滤器都应当有必要属性).

鉴于这一点,我们顺次利用unexpectedFlag、dealStatus、tradeDate和isold构造了一个复合索引.两个UI搜索器都能共用它.(次序很重要,假如你的谓语以差别的次序指定这些属性或在它们前摆列了其他属性,数据库就不会挑选该复合索引.)

后端搜索器和UI搜索器辨别太大,因此我们不得不为它构造另一个复合索引,顺次利用isold、participantCode和transactionType.

4.6.2绑定参数 vs.字符串拼接

既可以利用绑定参数构造HQL的WHERE子句,也可以利用字符串拼接的办法,该决意对性能会有一定影响.利用绑定参数的缘由是让数据库一次解析 SQL,对后续的反复恳求复用生成好的履行筹划,这样做节俭了CPU时间和内存.但是,为到达最优的数据拜候效率,差别的绑定值大概需求差别的SQL履行筹划.

比方,一小段数据范围大概只返回数据总量的5%,而一大段数据范围大概返回数据总量的90%.前者利用索引更好,此后者则最好利用全表扫描.

倡议OLTP利用绑定参数,数据仓库利用字符串拼接,因为OLTP普通在一个事件中反复插入和更新数据,只取少量数据;数据仓库普通只有少量SQL查询,有一个肯定的履行筹划比节俭CPU时间和内存更为重要.

如果你知道你的OLTP搜索对差别绑定值应当利用相同履行筹划又该怎么办呢?

Oracle 9i及今后版本在第一次调用绑定参数并生成履行筹划时能探出参数值.后续调用不会再探测,而是重用之前的履行筹划.


  以上是“加快你的Hibernate引擎(下)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 安装Apt-Fast加快你的apt-get 下载速度
  • 利用Xcache加快你的PHP站点
  • 加快你的Hibernate引擎(下)
  • 加快你的Hibernate引擎(上)
  • PHP站点用Squid再次猖獗加快你的WEB
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .