好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Cont()與Where().Count()有時性能差別如此之大!

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

熱門標簽:百度地圖標注改顏色 貴州房產智能外呼系統供應商 臨沂智能電銷機器人加盟哪家好 外呼運營商線路收費 一個導航軟件能用幾個地圖標注點 小e電話機器人 申請400電話在哪辦理流程 鎮江網路外呼系統供應商 電銷外呼有錄音系統有哪些
想起我之前在此列表中加入了一個字段,用于方便提示管理員公司的產品列表是否有修改之類的狀態字段,于是可以斷定是加了此字段的原因。

首先,先看看我之前是如何寫這個提示狀態字段的,實體中加入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秒,哇塞!

 

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

 

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

 

真的是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()有時性能差別如此之大!》,本文關鍵詞  Cont,與,Where,.Count,有時,性能,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Cont()與Where().Count()有時性能差別如此之大!》相關的同類信息!
  • 本頁收集關于Cont()與Where().Count()有時性能差別如此之大!的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 性受虐狂 自由xx视频| 懂色午夜精品久久久久久无码小说 | 男男调教双性| 农村黃色A片三級三級三級视频 | 武侠小说江湖艳女情| 二次元美女白丝| 久久久精品久久久久特色影视| 美女裸体秘?无遮挡屁股| 恋爱指南| 欧美一级做一级a做片性视频在线观看| 3p大好硬不要了了h| 粉红女郎韩国在线观看完整版| youjizz国产| ??奶头张开腿被?的小说| 色欲91AⅤ蜜臀aV一区二区| 折原ゆかり肉感在线播放| 超清波多野结衣精品一区| 最新韩国理论片30页| 久久精品99无色码中文字幕| 男生插女生动态图| 亚洲一区二区三区国产精华液| 丝袜肉岳的紧| 大地资源中文第二页在线观看| 爷爷你的太大了我害怕| 经典黄h长篇小说| 欧美AV色香蕉一区二区超碰| 护士院长办公室嗯呻吟视频| 里番库acg本子| 日本又爽又黄禁片动漫视频| 粗大的内捧猛烈进出校花| 色欲精品久久人妻av中文字幕 | 扒开双腿猛进入在线观看| 91视频app视频下载ios| 禁宫之极乐酷刑| mature性xxx分类| 成人h动漫精品一区二区三区| 美女裸体被爆?乳液| 免费观看性行为的视频网站 | 亚洲AⅤ欧美AⅤ综合AV | 花房姑娘在线播放免费观看| 欧美成人午夜视频在线观看|