LINQ vs SQL存储过程-性能和位置过滤(LIKE vs CONTAINS)



我有一个Azure云服务,它当前连接到一个SQL存储过程,该过程执行一个没有参数的select *。服务返回json。表中大约有10k行。该代码有一个列表包含要在一个列上进行筛选。

 List<clsSitesData> lstFilteredData = lstSearchData.Where(s => s.LS_TITLE.ToLower().Contains(SearchData.ToLower())).ToList();

令人惊讶的是,从jquery/knockout客户端消费服务非常快。

从代码中,似乎我每次都将整个表加载到列表中。

首先,我认为我将受益于存储过程中的参数来限制返回的数据,对吗?另外,也许还有一些SQL索引——记住SQL是在Azure上的。

但是,如果直接对表使用LINQ,而不是使用LINQ的存储过程,我应该期望它比上面更快或更好吗?

我现在没有性能问题,但我确实需要在更多列上设置条件。我也想知道每次拉出所有行是否会花费我Azure CPU小时。

共享数据的最有效方法是部署OData服务。有一些OData客户端,比如datajs和Breeze.js,它们允许你以类似LINQ的方式来查询数据:它可以过滤、页面、排序,甚至缓存数据,并在服务器上更新数据。

谷歌"SQL Azure OData",你会发现如何这样做的信息:在Azure中创建和托管OData服务。

有关breeze的更多信息,请查看此处。Datajs提供的功能较少,但您也可以使用它。

BTW,我忘了说OData不支持类似LIKE的东西,但是你可以使用startswith, endswithsubstringof,它们覆盖了部分LIKE的情况。

最新更新