0

Windows Azure サーバーに WEB SQL があり、40.000 行のテーブルで項目を検索する必要があります。クエリの実行時間は 1 分で、Web アプリ (またはあらゆる種類のアプリケーション) には長すぎます。今度はreduceのために何をしますか?

私の質問はこれに似ています: Entity Framework Very Large Table to Listですが、ページングの方法も大きいため、答えは受け入れられません。

検索付きのコード:

    public ActionResult SearchNcm(string typeSearch, string searchString)
    {
        var ncms = repository.VIEWNCM.ToList();

        if (Request.IsAjaxRequest())
        {
            if (!String.IsNullOrEmpty(searchString))
            {
                switch (typeSearch)
                {
                    case "cod":
                        ncms = ncms.Where(e => e.CODIGO_LEITURA.ToLower().Contains(searchString.ToLower()) || e.CODIGO.ToLower().Contains(searchString.ToLower())).ToList();
                        break;
                    default:
                        ncms = ncms.Where(e => e.DESCRICAO.ToLower().Contains(searchString.ToLower())).ToList();
                        break;
                }
            }
        }



        return PartialView("BuscarNcm", ncms);
    }
4

1 に答える 1

1

答えではありませんが、上記のコメントを拡張するスペースが必要です。

ToList() を繰り返すか呼び出すまで、IQueryable と IEnumerable は何もしないことに注意してください。つまり、次のようなことができます。

var ncms = repository.VIEWNCM; // this should be IQueryable or IEnumerable - no query yet

if(Request.IsAjaxRequest())
{
    if(!string.IsNullOrEmpty(searchString))
    {
        switch(typeSearch)
        {
                case "cod":
                    // No query here either!
                    ncms = ncms.Where(e => e.CODIGO_LEITURA.ToLower().Contains(searchString.ToLower()) || e.CODIGO.ToLower().Contains(searchString.ToLower()));
                    break;
                default:
                    // Nor here!
                    ncms = ncms.Where(e => e.DESCRICAO.ToLower().Contains(searchString.ToLower()));
                    break;
            }
        }
    }
}
// This is the important bit - what happens if the request is not an AJAX request?
else
{
    ncms = ncms.Take(1000); // eg, limit to first 1000 rows
}

return PartialView("BuscarNcm", ncms.ToList()); // finally here we execute the query before going to the View

searchString が空の場合は、おそらくデフォルトのフィルターも必要です

于 2013-08-06T00:22:50.227 に答える