我最近遇到了 Nhibernate 生成的 SQL 的性能问题,如
中所述Nhibernate generate plain sql query instead of execution statement
我还发现了一个描述类似经历的链接,来自唯一的杰夫·阿特伍德 (Jeff Atwood),网址为
http://legeronline.blogspot.ca/2009/03/evils-of-slow-paramaterized-query-plans.html
有人知道是否可以向 Nhibernate 添加“优化未知”选项吗?
最佳答案
这个例子有点详细:
public class OptionInterceptor: EmptyInterceptor
{
public override SqlString OnPrepareStatement(SqlString sql)
{
var parameters = sql.GetParameters();
var paramCount = parameters.Count();
if (paramCount == 0)
return sql;
string optionString = " OPTION (OPTIMIZE FOR (";
for (var i = 0; i < paramCount; i++)
{
var comma = i > 0 ? "," : string.Empty;
optionString = optionString + comma + "@p" + i + " UNKNOWN";
}
optionString = optionString + "))";
var builder = new SqlStringBuilder(sql);
builder.Add(optionString);
return builder.ToSqlString();
}
}
然后在你的 session 工厂/初始化程序中:
configuration.ExposeConfiguration(x =>
{
x.SetInterceptor(new OptionInterceptor());
});
关于Nhibernate 添加查询选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13709340/