我正在为ASP MVC中的搜索框构建查询。查询在LINQPad中需要10毫秒,在Visual Studio中需要16秒。有什么方法可以改进查询的查询或时间响应吗?
var queryOracle = (from TS in dbOracle.BI_TYPE_SERVICE
join MS in dbOracle.BI_MTR_SRV on TS.BI_ACCT equals MS.BI_ACCT
join SL in dbOracle.BI_SRV_LOC on MS.BI_SRV_LOC_NBR equals SL.BI_SRV_LOC_NBR
join C in dbOracle.BI_CONSUMER on TS.BI_ACCT equals C.BI_ACCT
join P in dbOracle.BI_PERSONAL on C.BI_CUST_NBR equals P.BI_CUST_NBR
join STR in dbOracle.BI_SRV_STAT_REF on TS.BI_SRV_STAT_CD equals STR.BI_SRV_STAT_CD
where P.BI_ADDR_TYPE != "2B" || P.BI_ADDR_TYPE != "2D" || P.BI_ADDR_TYPE != "FO" || P.BI_ADDR_TYPE != "CC" || P.BI_ADDR_TYPE != "8" || P.BI_ADDR_TYPE != "SE" || P.BI_ADDR_TYPE != "9" || P.BI_ADDR_TYPE != "BD" || P.BI_ADDR_TYPE != "CN" || P.BI_ADDR_TYPE != "CR" || P.BI_ADDR_TYPE != "CS" || P.BI_ADDR_TYPE != "M1" || P.BI_ADDR_TYPE != "M2" || P.BI_ADDR_TYPE != "M3" || P.BI_ADDR_TYPE != "MR"
where P.BI_ACCT == 0
where P.BI_FORMAT_NAME.StartsWith(term) || SL.BI_ADDR1.StartsWith(term) || MS.BI_MTR_NBR.StartsWith(term) || TS.BI_ACCT.ToString().StartsWith(term)
select new
{
LocationID = SL.BI_SRV_MAP_LOC,
MeterNumber = MS.BI_MTR_NBR,
AccountNumber = TS.BI_ACCT,
ServiceStatCD = TS.BI_SRV_STAT_CD,
ServiceStatus = STR.BI_SRV_STAT_DESC,
Name = P.BI_FORMAT_NAME,
ServiceAddr = SL.BI_ADDR1,
ServiceCity = SL.BI_CITY,
CustomerNumber = C.BI_CUST_NBR,
ServiceCNTY = SL.BI_CNTY_CD,
ServiceTOWN = SL.BI_TOWN_CD,
HomeAreaCode = P.BI_HOME_AREA_CD,
HomePhone = P.BI_HOME_PHN,
BusAreaCode = P.BI_BUS_AREA_CD,
BusPhone = P.BI_BUS_PHN,
MobileAreaCode = P.BI_MOBL_AREA_CD,
MobilePhone = P.BI_MOBL_PHN
}).AsNoTracking().Take(12).ToList();
答案 0 :(得分:0)
我有同样的问题,并想知道为什么。在我的例子中,代码中有一个断点,当在VS环境中运行时,它会减慢整个事情。
因此,禁用VS中查询中使用的断点,它应该更快。
答案 1 :(得分:-3)
第一个问题:为什么不使用单独的功能?
我建议你这样做 Parallel.For或Parallel.ForEach
我肯定不会在主线程中运行它。
我建议使用:
知道除了该查询之外使用的代码是很重要的。
可能不是查询本身需要时间。
祝你好运