亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

Cont()與Where().Count()有時性能差別如此之大!

2024-08-31 00:58:53
字體:
來源:轉載
供稿:網友
想起我之前在此列表中加入了一個字段,用于方便提示管理員公司的產品列表是否有修改之類的狀態字段,于是可以斷定是加了此字段的原因。

首先,先看看我之前是如何寫這個提示狀態字段的,實體中加入ContentStatus,然后直接在Linq語句中Select 實體對象中加入ContentStatus=Product_Maintain.Count(C => C.CompanyID == company.ID && C.IsDeleted == 0 && (C.AuditStatus == 0 || C.AuditStatus == 4))>0?"產品有更新":""。這時我想應該是加入三元運算,linq在轉Sql時,產生過多的,Case,when ,then語句,三元運算增加了判斷會影響查詢性能,于是我去掉后,再運行查看頁面,仍然很慢,感覺不出快了多少。

這時,我想起了LinqPad,看看到底轉換生成了怎樣的Sql語句。運用Count(條件)生成Sql代碼如下:

復制代碼 代碼如下:


SELECT COUNT(*) AS [value]
FROM (
SELECT
(CASE
WHEN ([t1].[CompanyID] = ([t0].[ID])) AND ([t1].[IsDeleted] = @p0) AND (([t1].[AuditStatus] = @p1) OR ([t1].[AuditStatus] = @p2)) THEN 1
WHEN NOT (([t1].[CompanyID] = ([t0].[ID])) AND ([t1].[IsDeleted] = @p0) AND (([t1].[AuditStatus] = @p1) OR ([t1].[AuditStatus] = @p2))) THEN 0
ELSE NULL
END) AS [value]
FROM [Company_Product_Maintain] AS [t1]
) AS [t2]
WHERE [t2].[value] = 1



這時我發現一個很簡單的Count的Sql 語句,linq轉換后變得如此復雜,我直接在sql server中運行此代碼,發現查詢還是很慢,于是我直接把ContentStatus=Product_Maintain.Where(C => C.CompanyID == company.ID && C.IsDeleted == 0 && (C.AuditStatus == 0 || C.AuditStatus == 4)).Count()生成Sql語句為:

代碼

復制代碼 代碼如下:


SELECT COUNT(*) AS [value]
FROM [GasSNS_Company_Equipment_Maintain] AS [t1]
WHERE ([t1].[CompanyID] = ([t0].[ID])) AND ([t1].[IsDeleted] = @p0) AND (([t1].[AuditStatus] = @p1) OR ([t1].[AuditStatus] = @p2))


發現運行速度那是快了一個數量級??!
后臺列表查詢結果速度大大提升有圖為證(聲明:以下圖都為項目中截圖,不是簡單的單表查詢,還連了用戶表,詳細表等數量也都挺大的):

 圖1為Count結果,用了35秒,哇塞!

Cont()與Where().Count()有時性能差別如此之大!

 

圖2為Where(條件).Count()結果,同樣的數據只用了4秒鐘,差了10倍!

Cont()與Where().Count()有時性能差別如此之大!

 

然后為了取值方面我還是加入三元運算,ContentStatus=Product_Maintain.Where(C => C.CompanyID == company.ID && C.IsDeleted == 0 && (C.AuditStatus == 0 || C.AuditStatus == 4)).Count()>0?"產品有更新":""。結果如下:

Cont()與Where().Count()有時性能差別如此之大!

 

真的是Count()與 Where()區別,不可能這么大差距吧?于是我單寫

 Product_Maintain.Where(C => C.IsDeleted == 0 && (C.AuditStatus == 0 || C.AuditStatus == 4)).Count()  與

 Product_Maintain.Count(C => C.IsDeleted == 0 && (C.AuditStatus == 0 || C.AuditStatus == 4))   

發現速度差不多,生成的代碼是一樣的。

復制代碼 代碼如下:


SELECT COUNT(*) AS [value]
FROM [GasSNS_Company_Equipment_Maintain] AS [t0]
WHERE ([t0].[IsDeleted] = @p0) AND (([t0].[AuditStatus] = @p1) OR ([t0].[AuditStatus] = @p2))


原來是我如果在Select中取某表的數量并且條件中使用了之前from后的某個變量時,這時用Count(條件)和Where(條件).Count()產生代碼才會不同,查詢速度才會出現數量級的差別。
代碼

復制代碼 代碼如下:


//效率低版本:
from company in Company
select new
{
contacter = v.ContacterID,
count = Product_Maintain.Count(C => C.CompanyID == company.ID &&C.IsDeleted == 0 && (C.AuditStatus == 0 || C.AuditStatus == 4))
}



復制代碼 代碼如下:


//效率高版本:
from company in Company
select new
{
contacter = v.ContacterID,
count = Product_Maintain.Where(C =>C.CompanyID == company.ID && C.IsDeleted == 0 && (C.AuditStatus == 0 || C.AuditStatus == 4)).Count()
}


否則,Count()與Where().Count()生成的SQL語句是相同的,效率也一樣。

      總結到此,望各位看官以后要注意!本人入園兩年來,第一發在首頁,請各位看官不吝賜教!

      

      謝謝各位看官的指點,聲明下以上查詢圖都LinqPad查詢結果截圖。至于為啥4秒左右為LinqPad查詢時間,Linq生成Sql語句在Sql Server中執行不到1秒,以下截圖作解釋:

   

Cont()與Where().Count()有時性能差別如此之大!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美日韩丝袜精品一区| 国产91精品网站| 欧美一级bbbbb性bbbb喷潮片| 久久久久久久久久久人体| 国产日韩欧美夫妻视频在线观看| 国产香蕉精品视频一区二区三区| 亚洲人成电影网站色…| 亚洲美女av电影| 午夜精品99久久免费| 国产精品欧美一区二区| 欧美日韩国产一区二区| 亚洲嫩模很污视频| 91大神在线播放精品| 91免费电影网站| 亚洲黄页视频免费观看| 久久久久久久影院| 久久久黄色av| 亚洲精品suv精品一区二区| 国产精品久久久久久久久久久久久| 亚洲成人激情在线观看| 91免费的视频在线播放| 国产在线日韩在线| 91久久精品日日躁夜夜躁国产| 久久国产精品网站| 国模极品一区二区三区| 欧美性猛交99久久久久99按摩| 欧美亚洲在线播放| 国产精品一区二区久久久久| 亚洲免费一在线| 午夜免费在线观看精品视频| 中文字幕精品一区久久久久| 91chinesevideo永久地址| 91精品视频在线免费观看| 精品女厕一区二区三区| 草民午夜欧美限制a级福利片| 欧美美女18p| 黑人巨大精品欧美一区二区| 午夜精品久久久久久久久久久久| 91久久久亚洲精品| 国产一区二区欧美日韩| 亚洲精品国产成人| 中文字幕亚洲在线| 国产一区二区三区在线播放免费观看| **欧美日韩vr在线| 最近2019中文免费高清视频观看www99| 色综合久久天天综线观看| 欧美激情手机在线视频| 成人女保姆的销魂服务| 97精品国产97久久久久久| 精品久久久久久久久久久久| 欧美大片第1页| 亚洲视频欧美视频| 久久久免费观看| 日韩一二三在线视频播| 神马久久久久久| 超薄丝袜一区二区| 久久福利网址导航| 92福利视频午夜1000合集在线观看| 亚洲国产精品推荐| 亚洲精品之草原avav久久| 国产欧美欧洲在线观看| 狠狠躁夜夜躁人人爽超碰91| 亚洲国产成人精品久久久国产成人一区| 中文亚洲视频在线| 日韩中文字幕网站| 在线激情影院一区| 亚洲欧美国产一区二区三区| 欧美限制级电影在线观看| 亚洲欧美日韩国产成人| 亚洲大胆美女视频| 日韩乱码在线视频| 国产精品免费看久久久香蕉| 久久99久久久久久久噜噜| www.久久久久| 91老司机在线| 亚洲女人被黑人巨大进入al| 69影院欧美专区视频| 欧美性xxxx| 欧美精品第一页在线播放| 97av视频在线| 亚洲成人在线视频播放| 久久精品在线播放| 久久久精品在线| 欧美成人午夜激情视频| 欧美怡红院视频一区二区三区| 欧美视频在线看| 久久精品视频播放| 欧美日韩国产一区在线| 国产精品三级久久久久久电影| 成人在线视频网| 日韩风俗一区 二区| 欧美性视频在线| 成人h视频在线| 成人免费淫片视频软件| 97国产一区二区精品久久呦| 自拍偷拍亚洲精品| 日韩三级影视基地| 日韩精品高清视频| 亚洲国产精品免费| 久久夜精品香蕉| 日韩中文理论片| 一本色道久久综合狠狠躁篇的优点| 国产亚洲视频中文字幕视频| 国产精品∨欧美精品v日韩精品| 羞羞色国产精品| 欧美成人在线网站| 亚洲香蕉av在线一区二区三区| 91久久国产精品91久久性色| 欧美黑人极品猛少妇色xxxxx| www高清在线视频日韩欧美| 国语自产精品视频在线看抢先版图片| 国内揄拍国内精品| 国产精品久久国产精品99gif| 91精品视频一区| 成人免费观看a| 美日韩精品视频免费看| 中文字幕日韩在线观看| 91精品视频在线| 成人激情黄色网| 国产玖玖精品视频| 久久久国产视频| 精品亚洲aⅴ在线观看| 日韩欧美国产高清91| 最近免费中文字幕视频2019| 成人av.网址在线网站| 97香蕉超级碰碰久久免费软件| 中文字幕精品一区二区精品| 国产精品视频一区二区高潮| 成人免费午夜电影| 97视频在线观看成人| 青草青草久热精品视频在线观看| 亚洲跨种族黑人xxx| 欧美日韩亚洲精品内裤| 日韩免费在线播放| 欧美怡红院视频一区二区三区| 国产精品v片在线观看不卡| www.午夜精品| 亚洲最大成人网色| 成人自拍性视频| 日韩最新在线视频| 欧美丝袜一区二区| 青青青国产精品一区二区| 色悠久久久久综合先锋影音下载| 欧美国产激情18| 尤物yw午夜国产精品视频明星| 92福利视频午夜1000合集在线观看| 91久久久久久久| 亚洲在线免费看| 亚洲人成电影在线观看天堂色| 日韩在线观看网站| 国产日韩精品在线| 国内精品400部情侣激情| 欧美黑人狂野猛交老妇| 久久精品视频导航| 色综合久久88色综合天天看泰| 久久久久久久999精品视频| 国产一区视频在线| 欧美国产视频一区二区| 欧美日韩亚洲一区二区| 日本高清不卡在线| 亚洲欧美日韩久久久久久| 日韩欧美在线视频免费观看| 91高清视频免费观看| 欧美成人亚洲成人日韩成人|