Hibernate SQL优化技巧dynamic-insert="true" dynamic-update="true"
来源:互联网 发布:数据库电子书下载 编辑:程序博客网 时间:2024/06/08 18:12
在Hibernate的映射文件的class tag使用dynamic-insert,dynamic-update,可以优化生成的SQL语句,提高SQL执行效率,最终可以提高系统性能。如果一个表的结构很复杂,字段很多的情况下,使用dynamic-insert,dynamic-update能够性能上的少许提升。Hibernate的映射文件中,class元素中可以定义dynamic-update="true|false"dynamic-insert="true|false"dynamic-update (可选, 默认为 false): 指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。dynamic-insert (可选, 默认为 false): 指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。请注意dynamic-update和dynamic-insert的设置并不会继承到子类, 所以在<subclass>或者<joined-subclass>元素中可能 需要再次设置。性能问题:SQL update语句是预先生成的,如果加上dynamic的话,每次update的时候需要扫描每个属性的更改,然后生成update,效率会稍微有点影响。如果不是有特殊的需求,默认就好了。如果你一次更新多条记录,hibernate将不能使用executeBatch进行批量更新,这样效率降低很多。同时,在这种情况下,多条sql意味着数据库要做多次sql语句编译。应否使用:
具体问题具体分析了,如果一个表字段比较多,并且经常只是更新一条记录的一两个字段,那么动态更新会更有效些。而且生成的SQL语句也容易懂。
0 0
- Hibernate SQL优化小技巧使用dynamic-insert="true" dynamic-update="true"
- Hibernate SQL优化技巧dynamic-insert="true" dynamic-update="true"
- dynamic-insert="true" dynamic-update="true"有玄机
- NHibernate SQL优化小技巧使用dynamic-insert="true" insert="true"
- dynamic-insert="true" dynamic-update="true",插入默认值的情况
- dynamic-update="true".dynamic-insert="true"的使用情况。
- hibernate的动态更新(dynamic-update = "true")
- Hibernate优化(1)dynamic-insert和dynamic-update
- Hibernate的dynamic-insert与dynamic-update
- Hibernate : dynamic-update dynamic-insert - 性能影响
- hibernate dynamic-insert 和 dynamic-update使用
- Hibernate的dynamic-insert与dynamic-update
- Hibernate的dynamic-insert与dynamic-update
- hibernate dynamic-insert 和 dynamic-update使用
- dynamic-insert,dynamic-update
- Hibernate的dynamic-insert dynamic-update和select-before-update
- dynamic-insert dynamic-update mutable="false" (让hibernate生成的sql不包括所有字段、指定不可变的实体)
- dynamic-insert与dynamic-update
- JS中关于clientWidth offsetWidth scrollWidth 等的含义
- JQ使用陷阱,获取的元素要转成对象才可以使用JQ的方法
- c++ 带命令行参数的main函数
- 方法
- 封装actionbar
- Hibernate SQL优化技巧dynamic-insert="true" dynamic-update="true"
- Mvp小例子
- 最简单修改printk打印等级
- 将数据保存到文件中
- 工业物联网浪潮下蓬勃发展的产业
- 会声会影安装问题(安装完成无法打开显示停止运行)
- ZooKeeper系列之四:ZooKeeper的配置
- 递归方法:例题
- Invoke()/BeginInvoke()区别