前言

  老平台的查询速度很慢,需要进行优化(...说白了就是优化sql语句),老平台用的strus2+hibernate框架,查询基本都是使用的HSQL。

关于hsql

  HQL是Hibernate Query Language即Hibernate查询语言

  优点:

    不需要再编写繁复的SQL 语句,针对实体类及其属性进行查询

   查询结果是直接存放在List 中的对象,不需要再次封装

  独立于数据库(针对不同数据库进行查询,跨数据库,Mysql->Oracle),

   对不同的数据库根据Hibernate dialect 属性的配置自动生成不同的SQL 语句执行

  缺点:

    涉及到复杂的sql或者数据量大的情况,不好优化

  

例子

  我的项目里就是一张单表的分页查询,一共2百多万条数据。(oracle数据库)

下面是sql分页查询时打印出来的原生sql是这样的。。

     select
*
from
( select
row_.*,
rownum rownum_
from
( select
tblmerinfo0_.MER_CODE as MER1_19_,
tblmerinfo0_.MER_NAME as MER2_19_,
tblmerinfo0_.MER_SHORT_NAME as MER3_19_,
tblmerinfo0_.MER_CITY as MER4_19_,
tblmerinfo0_.MER_NATION as MER5_19_,
tblmerinfo0_.MER_STATUS as MER6_19_,
tblmerinfo0_.MER_ACQ_CODE as MER7_19_,
tblmerinfo0_.MER_TYPE as MER8_19_,
tblmerinfo0_.MER_WARNING_AMT as MER9_19_,
tblmerinfo0_.MER_GROUP_ID as MER10_19_,
tblmerinfo0_.MER_COMMISION_TYPE as MER11_19_,
tblmerinfo0_.MER_COMMISION_VALUE as MER12_19_,
tblmerinfo0_.MER_TRANS_CURR as MER13_19_,
tblmerinfo0_.MER_SETT_CURR as MER14_19_,
tblmerinfo0_.MER_SETT_ACCT_NAME as MER15_19_,
tblmerinfo0_.MER_SETT_ACCT as MER16_19_,
tblmerinfo0_.MER_CB_CODE as MER17_19_,
tblmerinfo0_.MER_CB_NAME as MER18_19_,
tblmerinfo0_.MER_CORP as MER19_19_,
tblmerinfo0_.MER_MASTER as MER20_19_,
tblmerinfo0_.MER_REL_MAN as MER21_19_,
tblmerinfo0_.MER_REL_TEL as MER22_19_,
tblmerinfo0_.MER_FAX as MER23_19_,
tblmerinfo0_.MER_EMAIL as MER24_19_,
tblmerinfo0_.MER_ADDR as MER25_19_,
tblmerinfo0_.MER_POSTCODE as MER26_19_,
tblmerinfo0_.MER_PASSWORD as MER27_19_,
tblmerinfo0_.PASSWORD_INITIAL_VAL as PASSWOR28_19_,
tblmerinfo0_.PASSWORD_EXPIRED_DATE as PASSWOR29_19_,
tblmerinfo0_.PASSWORD_EXPIRED as PASSWOR30_19_,
tblmerinfo0_.BATCH_NO as BATCH31_19_,
tblmerinfo0_.REC_CREATE_TM as REC32_19_,
tblmerinfo0_.REC_UPDATE_TM as REC33_19_,
tblmerinfo0_.MER_OPEN_TM as MER34_19_,
tblmerinfo0_.MER_CLOSE_TM as MER35_19_,
tblmerinfo0_.MER_DAY_LIMIT as MER36_19_,
tblmerinfo0_.MER_SINGLE_LIMIT as MER37_19_,
tblmerinfo0_.SUPPORT_BRAND_FLAG as SUPPORT38_19_,
tblmerinfo0_.ROUTE_SCHEME as ROUTE39_19_,
tblmerinfo0_.BATCH_SETT_POINT as BATCH40_19_,
tblmerinfo0_.DELAY_SETT_DAYS as DELAY41_19_,
tblmerinfo0_.DCC_FLAG as DCC42_19_,
tblmerinfo0_.SUPPORT_FUNC_FLAG as SUPPORT43_19_,
tblmerinfo0_.CITY_CODE as CITY44_19_,
tblmerinfo0_.SUPPORT_DCC_FLAG as SUPPORT45_19_
from
SWTONLINE.TBL_MER_INFO tblmerinfo0_
order by
tblmerinfo0_.MER_CODE ) row_ )
where
rownum_ <= 24
and rownum_ > 12

执行时间:63s

个人分析了一下慢的原因:里层的查询像是查询了所有,然后外层的查询在分页。仅个人观点。如果有大神看到这里有不同的看法欢迎指出

下面是我个人的原生sql:

 select * from
(
select a.*, rownum r from

select * from tbl_mer_info where 1=1 order by mer_code
) a where rownum <= 24
) b where b.r > 12

执行时间:0.2s

个人分析:与上面的sql不同就是我的rownum先查询的<=24,然后外层在>12,这样会大大提交效率

写到这里,不禁就开始比较hibernate与mybatis的各自优点,个人觉得还是mybatis好,够灵活。虽然hibernate针对各个数据库设定了"方言",号称兼容性好,可是谁会在开发的过程中替换数据库呢?

hibernate的面向对象查询的效率有多低?的更多相关文章

  1. Criteria——Hibernate的面向对象查询

    提到Hibernate的查询.我们往往会想到HQL,他使我们的SQL语句面向对象话. 事实上细看,差点儿相同就是把SQL语句中的表和字段用所相应的实体和属性给取代了.事实上.Hibernate中还有还 ...

  2. Hibernate(五)——面向对象查询语言和锁

    Hibernate做了数据库中表和我们实体类的映射,使我们不必再编写sql语言了.但是有时候查询的特殊性,还是需要我们手动来写查询语句呢,Hibernate框架为了解决这个问题给我们提供了HQL(Hi ...

  3. Hibernate Query Language查询:

    Hibernate Query Language查询: Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Language)查询提供 ...

  4. hibernate的hql查询

    1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...

  5. Hibernate之HQL查询

    一.Hibernate 提供了以下几种检索对象的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 HQL 检索方式:使用面向对象的 H ...

  6. Hibernate五 HQL查询

    HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...

  7. Hibernate(九)HQL查询

    一.Hibernate提供的查询方式 OID查询方式:主键查询.通过get()或者load()方法加载指定OID的对象查询结果为一个 HQL查询方式:通过Query接口使用HQL语言进行查询 QBC查 ...

  8. 框架之 hibernate之各种查询

    1. Hibernate的查询方式 2. Hibernate的查询策略 案例:使用Hibernate完成查询所有联系人功能 需求分析 1. 完成所有的联系人的查询 技术分析之Hibernate框架的查 ...

  9. Hibernate框架的查询方式

    技术分析之Hibernate框架的查询方式        1. 唯一标识OID的检索方式        * session.get(对象.class,OID)    2. 对象的导航的方式       ...

随机推荐

  1. 1855: [Scoi2010]股票交易[单调队列优化DP]

    1855: [Scoi2010]股票交易 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1083  Solved: 519[Submit][Status] ...

  2. 【BZOJ2287】【POJ Challenge】消失之物 背包动规

    [BZOJ2287][POJ Challenge]消失之物 Description ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了 ...

  3. Maven开发系统

    Maven的优点: 自动从互联网中获取jar包,并实现了一步构建. pom.xml的配置 依赖管理(导入对应的jar包) 通过坐标(定位到仓库中的包的位置,并将jar包导入到项目中,如果版本升级,只需 ...

  4. angular 2+ innerHTML属性中内联样式丢失

    通过属性绑定的innerHTML,把字符串里面的html解析 解析是没问题的,但一些内联样式会丢失掉 为了不丢掉样式,需要自定义一个管道来解决这个问题 html.pipe.ts import {Pip ...

  5. SpringMVC的解释与搭建Maven私有代理服务器

    SpringMVC静态资源处理 通常会配置SpringMVC拦截所有请求 即将DisptcherServlet的url-pattern设置为 / 此时会导致SpringMVC同时拦截.css   .j ...

  6. 关于navicat 系列软件一点击菜单栏就闪退

    navicat 系列软件一点击菜单栏就闪退 多次卸载安装都出现了闪退的现象  后来发现,原来是启动了有道词典屏幕取词才会出现这种现象,关了有道就没事.

  7. Struts2---输入验证

    1. Struts2 的验证 1). 验证分为两种: > 声明式验证* 需要解决的问题如下: >> 确定对哪个 Action 或 Model 的那个字段进行验证 >> 使 ...

  8. R语言中基于聚类的离群点挖掘

    思路:首先,通过K-means算法将数据点划分为成若K个簇:然后计算每一个数据对象到最近簇的中心距离,来与离群点设置的阈值进行比较,以此来判别该数据对象是否是离群点. 1.读取数据 data<- ...

  9. 自动生成项目的Makefile文件

    自动生成项目的Makefile文件 理论基础 跟我一起写 Makefile:   http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4 ...

  10. Spark源码分析 – 汇总索引

    http://jerryshao.me/categories.html#architecture-ref http://blog.csdn.net/pelick/article/details/172 ...