【发布时间】:2014-01-07 00:09:08
【问题描述】:
我正在寻求执行最快的下拉查询,该查询将通过互联网返回 json 来轮询数据库。代码 sn-p 是一个由 Jquery Ajax 函数调用的 c# MVC 控制器。我正在寻找是否有人有任何提高性能的想法。可能有超过 50,000 条客户记录。
这是我的 MVC 控制器,客户端上发生的每个按键都会调用它。
//Load Customers as typing
public ActionResult DropDownLoader(string SearchText, int MaxResults)
{
NovaDB db = new NovaDB((string)Session["DbConnection"]);
var search1 = (from c in db.Customers
where c.Name.StartsWith(SearchText) || c.Street.StartsWith(SearchText) && c.Fresh == false
select new { XID = c.ID, Line1 = c.Name, Line2 = c.Street, Line3 = c.City + ", " + c.State + " " + c.Zip, Search = 1 });
var search2 = (from c in db.Customers
where c.Name.Contains(SearchText) || c.Street.Contains(SearchText) && c.Fresh == false
select new { XID = c.ID, Line1 = c.Name, Line2 = c.Street, Line3 = c.City + ", " + c.State + " " + c.Zip, Search = 2 });
var results = search1.Union(search2).OrderBy(x => x.Search).Take(MaxResults).ToList();
return Json(results, JsonRequestBehavior.AllowGet);
}
【问题讨论】:
-
不要一次返回 50,000 个项目.. 无论如何,生成的 SQL 是什么样的? 【如何】SQL查询慢?数据是否适当编入索引?在两个查询的条件下折叠可能会更好(顺便说一句,Contains 是 StartsWith 的超集).. 但是 RDBMS 非常聪明。
-
不,它不会立即返回 50,000,但会在输入前 2 个字符后开始搜索。我不知道如何找到生成的 SQL。该应用程序仍在开发中,因此尚无实际结果,只是希望生成有效的代码。我想在包含结果之前给出 StartsWith 结果,以获得更好的匹配结果。谢谢..
-
如果使用 EF,请参阅 Profiling Database Activity in the Entity Framework。 (可能有更新/不同的方法,我只积极与 L2S 提供商合作。)
标签: asp.net-mvc performance linq drop-down-menu