NHibernate查询优化的相关资料

一.http://www.cnblogs.com/dddd218/archive/2009/09/01/1557640.html

1.立即加载(lazy=false)并不能在所有情况下都会减少SQL语句,同时还会带来过量读取数据的严重后果
  比如,在mapping文件中为实体AEntity设置了一个关联实体BEntity,并且将这个关联设置为lazy=false,这样当加载实体AEntity时(调用Get(id)),NHibernate就会自动加载实体BEntity。通过查看NHibernate生成的sql发现NHibernate生成的是2条sql,第一条sql获取的是AEntity,第二条获取的是BEntity,所以说在这种情况下,我的理解是,lazy=false并不会减少实际执行的sql语句,只是减少了程序员编写查询(sql)的数量,适当减轻了程序员的编程负担。
  立即加载的最大好处就是关联实体或集合由NHibernate自动加载,无需程序员手工加载。但是付出的代价则是有可能导致数据的过量读取,加大数据库、网络数据传输、应用服务器的负担,举例如下:
(1)多对一的关联实体立即加载:比如当前某个操作仅需获取AEntity而不需要获取BEntity的详细信息,由于立即加载,导致在加载AEntity的同时加载BEntity,如果BEntity还关联了CEntity而且也是立即加载,那么NHibernate同时还会加载CEntity,如果CEntity还关联了……
(2)一对多的关联集合立即加载:如果关联的数据是一个集合,并且集合数据很多(比如集合中有成千上万条数据),那么一次性立即加载整个关联集合数据的开销是显而易见的。
(3)类(class)级别的lazy=false:上面提到的两种情况是把lazy=false设置在关联级别上(细粒度),如果把lazy=false设置在整个class上(大粒度),那么情况将更加糟糕,这样当加载该类实体时会同时加载所有关联的实体和集合。

2.所有的关联实体和关联集合最好都保持默认的延迟加载
  由上面的分析可知,关联实体和集合最好保持默认的延迟加载,所以我在实际的开发中是不进行任何lazy=false设置的。如果要同时加载关联实体或集合,最有效的方法就是编写join和 dynamic fetching join的查询操作,这既可以减少所需执行的sql语句(join操作可以在一条语句中获取多个关联实体(关联数据表)或关联实体的properties(字段), 这是由join这类关系操作的本质决定的),同时按需获取数据避免数据的过量加载。

3. 普通join与 dynamic fetching join的区别
  刚开始使用NHibernate时,以为join与 dynamic fetching join是一回事,后来才明白两者的区别。我的理解,说得简单一点就是,dynamic fetching join会在一条sql语句中获取关联实体和/或关联集合数据,并把它(们)装配(marshal)成完整的persistent entity。而join会在一条sql语句中可以仅获取关联实体的某个property或某几个properties,而不一定是一个完整的persistent entity。具体join与 dynamic fetching join操作请参见在线文档。

4. 尽量避免在mapping文件中进行如下这些设置
  如:lazy="false"(立即加载), fetch="subselect"(子查询抓取),batch-size="20"(批量抓取),fetch="join"(关联抓取)等,因为在 mapping文件中的设置是global设置,会对整个系统产生全局性的影响。而且有些设置对Get、Load、HQL和Criteria都产生影响,而有些设置对HQL不影响对Criteria有影响。举个例子,当分别执行同样功能的HQL和Criteria时,却得到不同的查询结果时,你或许会感到非常惊讶;当对此问题进行了一天一夜的调试和冥思苦想之后,突然发现是由于mapping文件中的某个设置导致HQL和Criteria的差异时,你一定会气得想把电脑给砸了,并发誓永不再在mapping中设置这些东西!

时间: 2024-08-07 20:44:08

NHibernate查询优化的相关资料的相关文章

华为FusionCloud 云计算解决方案及相关资料下载

华为FusionCloud云计算解决方案引入水平融合.垂直融合.接入融合和数据融合四位一体的全融合,对企业与行业传统数据中心的IT基础设施的进行"融合重构", 帮助企业化繁为简,实现商业价值. FusionCloud 彻底打破原有的笨重的IT基础设施在支撑企业核心业务效率与成本方面的束缚与障碍,把企业传统数据中心改造成为一个高度简化.标准化.自动化和弹性的云数据中心,使得企业的IT支撑系统从企业的"成本中心"转型成为推动企业核心业务不断发展的引擎. 相关资料下载地址

【MVC】MusicStore相关资料

引言 当你对MVC的项目结构有一定了解时,那就可以开始学习一个世界级的MVC入门demo--MusicStore.学习的绝招就是把它抄一遍. 相关资料 MVC Music Store  Codeplex主页,有源码有PDF文档,不过只有MVC 3版本的. http://www.asp.net/mvc 微软的ASP.NET主页,林林总总包含了相当多的学习资料.全英文,英文苦手如我可以用Bing全文翻译,目测准确率达60%,个别句子不通的看看原文就好. http://pan.baidu.com/s/

GBrowse配置相关资料

GBrowse配置相关资料(形状.颜色.配置.gff3) http://gmod.org/wiki/Glyphs_and_Glyph_Optionshttp://gmod.org/wiki/GBrowse_Configuration/Glyphs http://gmod.org/wiki/GBrowse_Configuration/Feature_frequency_histograms (2010)http://boyun.sh.cn/bio/?p=1817 (2011  GBrowse之频率

archlinux相关资料整理

Arch linux Arch Linux Wiki Arch linux Wiki Markdown Arch Wiki python continuing ... archlinux相关资料整理,布布扣,bubuko.com

关于Jetson Kit开发相关资料

首先是nVidia官方对于Jetson Kit的介绍: http://www.nvidia.com/object/jetson-tk1-embedded-dev-kit.html https://developer.nvidia.com/jetson-tk1 然后是nVidia官方对Jetson开发支持: https://developer.nvidia.com/jetson-tk1-support 关于Jetson Kit开发相关资料,布布扣,bubuko.com

USB相关资料汇总

[1]USB规范,一切的一切,基本的基本,天书级别USB_11_spec(中文).pdf    USB1.1规范(中文版) usb_20.pdf                     USB2.0规范(英文版)[2]USB大全(USB Complete),看名字就知道了,有你所想了解的一切,通俗易懂USB-complete.pdf  version 2 -- USB Complete第二版 英文Usb Complete - Everything You Need To Develop Cust

http连接优化与浏览器允许的并发请求资源数相关资料(整理转载)

网页性能优化相关资料: https://developer.yahoo.com/performance/rules.html#page-nav 前端技术的逐渐成熟,还衍生了domain hash, cookie free, css sprites, js/css combine, max expires time, loading images on demand等等技术.这些技术的出现和大量使用都和并发资源数有关. 按照普通设计,当网站cookie信息有1 KB.网站首页共150个资源时,用户

UIlabel居上对齐遇到的问题和解决方法以及其他相关资料

UILabel的text的对其方式有四种类型 NSTextAlignmentLeft; NSTextAlignmentCenter; NSTextAlignmentRight; 基本够用 但是今天遇到个问题 就是当我label很高字体很小的时候 默认的label文字永远是默认在中间  上图 [myLabel sizeToFit];首先试了这个方法 但是发现改变大小适应这个属性 会让文字在左上角并且label的height也随之缩小 添加numberToLine=0可以在换行的时候改变高度 其实这

准备要看的node.js相关资料

node.js电子书 了不起的Node.js 深入浅出Node.js node.js入门经典 node.js开发指南 node.js相关优秀博文 官网 Infoq深入浅出Node.js系列(进阶必读) Node.js中文文档 被误解的 Node.js Node.js C++ addon编写实战系列 热门node.js模块排行榜,方便找出你想要的模块 nodejs多线程,真正的非阻塞 浅析nodejs的buffer类 利用libuv编写异步多线程的addon实例 Node.js中exports与m