1

最近、Nhibernateで生成されたSQLでパフォーマンスの問題が発生しました。

Nhibernateは実行ステートメントの代わりにプレーンSQLクエリを生成します

私はまた、唯一のジェフ・アトウッドからの同様の経験を説明するリンクを見つけました

http://legeronline.blogspot.ca/2009/03/evils-of-slow-paramaterized-query-plans.html

Nhibernateに「OptimizeUknown」オプションを追加する方法があるかどうか誰かが知っていますか?

4

2 に答える 2

2

この例はもう少し冗長です。

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();
    }
}

次に、sessionfactory / initializerで:

configuration.ExposeConfiguration(x =>
    {
        x.SetInterceptor(new OptionInterceptor());
    });
于 2014-08-01T00:07:10.137 に答える
0
  • MsSqlDialectまたは
  • ExecuteReader()IConnectionProviderを実装して、が呼び出されたときにヒントを追加する独自のコマンドラッパーを挿入します
于 2012-12-11T11:58:51.713 に答える