非Key上的NHibernate查询比单列主键上的查询需要更长的时间来水合对象

时间:2011-12-16 06:37:39

标签: nhibernate oracle10g

我注意到NHibernate有一种特殊的行为。

上下文: 我有一个带有复合键的表(一个数字,一个字符串和一个日期)和一些其他列。我注意到这个表(hibernate类)的查询明显慢于其他表上的查询。即使只返回了一个记录(hibernate对象)。

观察:

  1. 引入了代理键并将其映射为主键,再次运行查询会产生与之前对象水合相同的性能。
  2. 如果在代理键上查询,对象的水化速度要快6-7倍。 2。
  3. 在上述所有查询运行中,数据库性能都是一致的。

    此表的hibernate映射中没有定义关联或关系。

    我无法解释对象水合作用的性能差异(用数据填充.Net对象)。

    当我必须在条件中使用其他列时,我可以做些什么来调整代码,使其与使用PK的查询一样高效。

    先谢谢

    基兰

    编辑:表结构..我已经放入了创建表脚本本身..因为我无法正确格式化..

    创建表“测试”   (      “REFERENCE”VARCHAR2(5 BYTE)NOT NULL,      “PRIORITY”NUMBER(6,0)NOT NULL,      “EFF_FROM_DATE”DATE NOT NULL,      “EFF_TO_DATE”DATE NOT NULL,      “VALUE”VARCHAR2(100 BYTE)NOT NULL,      “LAST_UPDATE_USERNAME”VARCHAR2(30 BYTE)NOT NULL,      “LAST_UPDATE_DATE_TIME”DATE NOT NULL,      “NOTE_1”VARCHAR2(20 BYTE),      “NOTE_2”VARCHAR2(20 BYTE)   )

1 个答案:

答案 0 :(得分:0)

这种差异是通过强制nhibernate使用Oracle驱动程序而不是oracle的Microsoft驱动程序来解决的。

我按照此博客中的步骤操作 http://www.timvasil.com/blog14/category/Oracle.aspx