c#-通过实体框架提高SQL Server中的搜索性能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-通过实体框架提高SQL Server中的搜索性能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2201字,纯文字阅读大概需要4分钟。
内容图文
我正在使用SQL Server 2012 Express,实体框架6和ASP.NET MVC 5.
在SQL Server中,我有一个带有40万条记录的价目表.价目表的结构如下:
|Id|Manufacturer|Name|Description|StockQuantity|PriceId|
我也有一个价格表:
|Id|Price|CurrencyId|
和货币表:
|Id|Name|Alias|Value|
“名称”和“描述”列由SQL Server全文索引建立索引.
我需要从价目表中获取20条记录,其中“名称”或“描述”包含搜索查询,并将其作为XML返回.而且我需要让它们少于一秒钟,因为这是全局搜索服务的条件之一(它的请求超时是1秒,我无法更改).这是结果XML的结构:
<items>
<item mfr="PC" Name="Laptop" Description="2.4GHz, etc." StockQuantity="500" P1="100" P2="200" P3="300" Cur="USD"/>
</items>
其中P1,P2和P3是不同订单数量的价格.
我正在使用此代码来获取记录:
using (var db = new DatabaseContainer()) {
db.Configuration.AutoDetectChangesEnabled = false;
db.Configuration.ValidateOnSaveEnabled = false;
db.Configuration.LazyLoadingEnabled = false;
var result =
(from pricelistRow in db.EFPricelist
where pricelistRow.Name.Contains(search) || pricelistRow.Description.Contains(search)
select new Result {
Manufacturer = pricelistRow.Manufacturer,
Name = pricelistRow.Name,
Description = pricelistRow.Description,
StockQuantity = pricelistRow.StockQuantity,
P1 = pricelistRow.EFPricelistRowPrice.Any() ? SqlFunctions.StringConvert(pricelistRow.EFPricelistRowPrice.Min(x => x.Price)) : "",
P2 = pricelistRow.EFPricelistRowPrice.Count() == 3 ? SqlFunctions.StringConvert(pricelistRow.EFPricelistRowPrice.OrderBy(x => x.Price).Skip(1).FirstOrDefault().Price) : "",
P3 = pricelistRow.EFPricelistRowPrice.Count() > 1 ? SqlFunctions.StringConvert(pricelistRow.EFPricelistRowPrice.Max(x => x.Price)) : "",
Cur = pricelistRow.EFPricelistRowPrice.Any() ? pricelistRow.EFPricelistRowPrice.FirstOrDefault().EFCurrency.Alias : ""
}).Take(20).ToList();
return new XmlResult(new Result {
Items = result
});
}
大约花了2秒钟.如何提高性能?
解决方法:
不要使用包含.这完全不是实体框架问题-而是SQL.
pricelistRow.Name.Contains(search)
转换为WHERE [Name]像’%searchterm%’
看到前面的百分比?这意味着完整的数据扫描和索引没有帮助.
备择方案:
> StartsWith(就像’searchterm%’),因此索引有效
>使用存储过程(EF中没有其他方法),然后使用全文本索引语法(EF无法处理).
但是否则-那是行不通的.在这种情况下,就您而言,这意味着要进行全表扫描.期.
内容总结
以上是互联网集市为您收集整理的c#-通过实体框架提高SQL Server中的搜索性能全部内容,希望文章能够帮你解决c#-通过实体框架提高SQL Server中的搜索性能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。