Nhibernate的HQL调优的一点小经验
一点小经验,写下来做个笔记,也与大家分享一下
今天在进行性能调优的时候发现一个问题:一句HQL经Nhibernate翻译出来变成SQL后执行效率缓慢
首先来看一下翻译出来的SQL语句
代码
exec sp_executesql N'select top 20 ... from TblRegisteredVisitor registered0_, TblVisitor visitor1_ where registered0_.VisitorID=visitor1_.VisitorID and registered0_.Institution=@p0 order by visitor1_.VisitorIdNumber, registered0_.RegisteredVisitorID',N'@p0 nvarchar(4)',@p0=N'TTSH'
索引已经创建了,但是logical read依然很高~~
问题出在哪里呢?出在where子句里使用的几个字段都是varchar的,但HQL翻译出的SQL语句中都变成了nvarchar
于是自然的想到HQL语句中的编辑过程中,应该对应的使用SetAnsiString,但代码中却使用了SetString。
于是修正代码为SetAnsiString之后,logical read果然降了下来~~