1

こんにちは私はMySQLConnector/Net6.3.5とEntityFramework4.1を使用しています。

DBには、約320000行のテーブルがあり、列ごとに単純なクエリを実行します。

パフォーマンスに少し問題があります。クエリをどのように高速化するか、いくつかの手法や方法がありますか?

クエリのタイムアウトは約6.3秒で、サーバーはローカルではありません。

これが私が使用する方法です:

/// <summary>
/// select podla kluca
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public TEntity SelectByKey(string key)
{
    // First we define the parameter that we are going to use the clause.
    var xParam = Expression.Parameter(typeof(TEntity), typeof(TEntity).Name);
    MemberExpression leftExpr = Expression.Property(xParam, KeyProperty);
    Expression rightExpr = Expression.Constant(key);
    BinaryExpression binaryExpr = Expression.Equal(leftExpr, rightExpr);

    //Create Lambda Expression for the selection
    Expression<Func<TEntity, bool>> lambdaExpr = Expression.Lambda<Func<TEntity, bool>>
        (binaryExpr, new ParameterExpression[] { xParam });

    //Searching ....
    IList<TEntity> resultCollection = ((IRepository<TEntity, TCtx>)this).SelectAll(new Specification<TEntity>(lambdaExpr));

    if (null != resultCollection && resultCollection.Count() > 0)
    {
        //return valid single result
        return resultCollection.First();
    }
    return null;
}
4

1 に答える 1

0

最後の数行を置き換えるのはどうですか(申し訳ありませんが、テストしていません)が、頭のてっぺんからです。

IList<TEntity> resultCollection = ((IRepository<TEntity, TCtx>)this).SelectAll(new Specification<TEntity>(lambdaExpr));
((IRepository<TEntity, TCtx>)this)
if (null != resultCollection && resultCollection.Count() > 0)
{
   //return valid single result 
   return resultCollection.First();
}
return null;

// with following lines

foreach(TEntity entity in ((IRepository<TEntity, TCtx>)this).SelectAll(new Specification<TEntity>(lambdaExpr)))
    return entity;
return null;
于 2011-10-27T08:28:02.350 に答える