尝试从非常大的数据中检索mysql中多个相关表中的数据

2guxujil  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(379)

我知道这个问题已经被问过好几次了,但我一直在尝试从mysql表中多对多相关的多个表中获取数据。而且,每个表至少包含500000条记录。在这种情况下,如何加快数据检索过程?
虽然,我试图获得数据使用分组按屏幕准备数据,但它仍然工作得很慢。
在屏幕的控制器中,我使用了linq组。

  1. var lstclientId = (from c in DBContext.groupmasters.Where(w => w.isactive == true && w.UserID == userid)
  2. group c by c.ClientID into d
  3. select new
  4. {
  5. clientID = d.Key,
  6. });
  7. var lstJobTypeID = (from c in DBContext.jobrequisitions.Where(w => w.ISActive == true)
  8. group c by new { c.CreativeID, c.ProjectName, c.client.ClientName, c.brandmaster.branddesc } into d
  9. select new
  10. {
  11. CreativeID = d.Key.CreativeID,
  12. ProjectName = d.Key.ProjectName,
  13. ClientName = d.Key.ClientName,
  14. branddesc = d.Key.branddesc,
  15. }).OrderBy(o => o.CreativeID);
  16. List<jobrequisition> lstrequisition = new List<jobrequisition>();
  17. List<jobrequisition> lstrequisitionusers = new List<jobrequisition>();
  18. if ((Session["deptCode"]).ToString() == "QC" || (Session["deptCode"]).ToString() == "OP" || Convert.ToBoolean(Session["IsAdmin"]) == true)
  19. {
  20. database2Entities JobEntities = new database2Entities();
  21. lstrequisition = JobEntities.jobrequisitions.Where(w => w.ISActive == true).ToList();
  22. lstrequisitionusers.AddRange(lstrequisition);
  23. }
  24. else
  25. {
  26. foreach (var i in lstclientId)
  27. {
  28. database2Entities JobEntities = new database2Entities();
  29. lstrequisition = JobEntities.jobrequisitions.Where(w => w.ISActive == true && w.ClientID == i.clientID).ToList();
  30. lstrequisitionusers.AddRange(lstrequisition);
  31. }
  32. }
  33. Hashtable ht = new Hashtable();
  34. int k = 0;
  35. foreach (var i in lstJobTypeID)
  36. {
  37. foreach (jobrequisition objRequestion in lstrequisitionusers.OrderBy(o => o.CreativeID))
  38. {
  39. if (objRequestion.CreativeID == i.CreativeID)
  40. {
  41. database2Entities ArtContext = new database2Entities();
  42. database2Entities SubArtContext = new database2Entities();
  43. if (lstArtWorkReqID.Count() == 0)
  44. {
  45. ///old code...
  46. var lstArt = ArtContext.artworkrequisitions.SqlQuery("SELECT *, count(ArtWorkName) as awtname FROM artworkrequisition as awt group by ArtWorkID having CreativeID = '" + i.CreativeID + "' and IsActive = 1").ToList();
  47. foreach (artworkrequisition art in lstArt)
  48. {
  49. int isCompletedcount = 0, assigncount = 0, allitemcount = 0, jobassignedcount = 0, iscompletedjobcount = 0;
  50. List<artworkrequisition> allartworkitems = SubArtContext.artworkrequisitions.Where(w => w.ArtWorkID == art.ArtWorkID && w.IsActive == true).ToList();
  51. jobassignedcount = allartworkitems.Where(w => w.isAssigned == true).Count();
  52. allitemcount = allartworkitems.Where(w => w.IsActive == true).Count();
  53. if (jobassignedcount > 0)
  54. {
  55. if (jobassignedcount <= allitemcount)
  56. {
  57. foreach (artworkrequisition singleartitem in allartworkitems)
  58. {
  59. if (singleartitem.isAssigned == null && singleartitem.isAssigned == true)
  60. {
  61. job_assigned_employee allocatedjobdetails = SubArtContext.job_assigned_employee.Where(w => w.ItemJobReqID == singleartitem.Id && w.JobTypeID == 1 && w.JobReqNo == singleartitem.ArtWorkID && w.IsActive == true).FirstOrDefault();
  62. if (allocatedjobdetails.IsCompelete == true)
  63. {
  64. iscompletedjobcount += 1;
  65. }
  66. }
  67. }
  68. if (iscompletedjobcount < allitemcount)
  69. {
  70. lstArtWorkReqID.Add(art);
  71. }
  72. }
  73. }
  74. else
  75. {
  76. lstArtWorkReqID.Add(art);
  77. }
  78. }
  79. }
  80. else
  81. {
  82. var lstArt = ArtContext.artworkrequisitions.SqlQuery("SELECT *, count(ArtWorkName) awtname FROM artworkrequisition awt group by ArtWorkID having CreativeID = '" + i.CreativeID + "' and IsActive = 1").ToList();
  83. foreach (artworkrequisition art in lstArt)
  84. {
  85. int isCompletedcount = 0, assigncount = 0, allitemcount = 0, jobassignedcount = 0, iscompletedjobcount = 0;
  86. List<artworkrequisition> allartworkitems = SubArtContext.artworkrequisitions.Where(w => w.ArtWorkID == art.ArtWorkID && w.IsActive == true).ToList();
  87. jobassignedcount = allartworkitems.Where(w => w.isAssigned == true).Count();
  88. allitemcount = allartworkitems.Where(w => w.IsActive == true).Count();
  89. if (jobassignedcount > 0)
  90. {
  91. if (jobassignedcount <= allitemcount)
  92. {
  93. foreach (artworkrequisition singleartitem in allartworkitems)
  94. {
  95. if (singleartitem.isAssigned != null && singleartitem.isAssigned == true)
  96. {
  97. job_assigned_employee allocatedjobdetails = SubArtContext.job_assigned_employee.Where(w => w.ItemJobReqID == singleartitem.Id && w.JobTypeID == 1 && w.JobReqNo == singleartitem.ArtWorkID && w.IsActive == true).FirstOrDefault();
  98. if (allocatedjobdetails != null)
  99. {
  100. if (allocatedjobdetails.IsCompelete != null && allocatedjobdetails.IsCompelete == true)
  101. {
  102. iscompletedjobcount += 1;
  103. }
  104. }
  105. }
  106. }
  107. if (iscompletedjobcount <= jobassignedcount && iscompletedjobcount != allitemcount)
  108. {
  109. lstArtWorkReqID.Add(art);
  110. }
  111. }
  112. }
  113. else
  114. {
  115. lstArtWorkReqID.Add(art);
  116. }
  117. // job_assigned_employee allocatedjobdetails = SubArtContext.job_assigned_employee.Where(w => w.ItemJobReqID == singleartitem.Id && w.JobTypeID == 1 && w.JobReqNo == singleartitem.ArtWorkID && w.IsActive == true).FirstOrDefault();
  118. }
  119. }
  120. if (lstPhotoStockReq.Count() == 0)
  121. {
  122. var lstPhotoStock = ArtContext.photographyrequisitions.SqlQuery("SELECT * FROM photographyrequisition where CreativeNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by photographyReqNo").ToList();
  123. foreach (photographyrequisition objphot in lstPhotoStock)
  124. {
  125. lstPhotoStockReq.Add(objphot);
  126. }
  127. }
  128. else
  129. {
  130. var lstPhotoStock = ArtContext.photographyrequisitions.SqlQuery("SELECT * FROM photographyrequisition where CreativeNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by photographyReqNo").ToList();
  131. foreach (photographyrequisition objphot in lstPhotoStock)
  132. {
  133. lstPhotoStockReq.Add(objphot);
  134. }
  135. }
  136. if (lstInterActiveWorkReq.Count() == 0)
  137. {
  138. var lstinteractivereq = ArtContext.interactiverequisitions.SqlQuery("SELECT * FROM interactiverequisition where CreativeID = '" + i.CreativeID + "' and isActive = 1 group by InteractiveID").ToList();
  139. foreach (interactiverequisition objInter in lstinteractivereq)
  140. {
  141. lstInterActiveWorkReq.Add(objInter);
  142. }
  143. }
  144. else
  145. {
  146. var lstinteractivereq = ArtContext.interactiverequisitions.SqlQuery("SELECT * FROM interactiverequisition where CreativeID = '" + i.CreativeID + "' and isActive = 1 group by InteractiveID").ToList();
  147. foreach (interactiverequisition objInter in lstinteractivereq)
  148. {
  149. lstInterActiveWorkReq.Add(objInter);
  150. }
  151. }
  152. if (lstTransWorkReq.Count() == 0)
  153. {
  154. var lstTranslatereq = ArtContext.translationrequisitions.SqlQuery("SELECT * FROM translationrequisition where creativeID = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by TransReqNo").ToList();
  155. foreach (translationrequisition objTrans in lstTranslatereq)
  156. {
  157. lstTransWorkReq.Add(objTrans);
  158. }
  159. }
  160. else
  161. {
  162. var lstTranslatereq = ArtContext.translationrequisitions.SqlQuery("SELECT * FROM translationrequisition where creativeID = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by TransReqNo").ToList();
  163. foreach (translationrequisition objTrans in lstTranslatereq)
  164. {
  165. lstTransWorkReq.Add(objTrans);
  166. }
  167. }
  168. if (lstPrintProductionReq.Count() == 0)
  169. {
  170. var lstPrintProductReq = ArtContext.printproductionrequisitions.SqlQuery("SELECT * FROM printproductionrequisition where CampaingNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by PrintProductionReqID").ToList();
  171. foreach (printproductionrequisition objPrint in lstPrintProductReq)
  172. {
  173. lstPrintProductionReq.Add(objPrint);
  174. }
  175. }
  176. else
  177. {
  178. var lstPrintProductReq = ArtContext.printproductionrequisitions.SqlQuery("SELECT * FROM printproductionrequisition where CampaingNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by PrintProductionReqID").ToList();
  179. foreach (printproductionrequisition objPrint in lstPrintProductReq)
  180. {
  181. lstPrintProductionReq.Add(objPrint);
  182. }
  183. }
  184. if (lstFilmProductionReq.Count() == 0)
  185. {
  186. var lstFilmproductionReq = ArtContext.filmproductionrequisitions.SqlQuery("SELECT * FROM filmproductionrequisition where CampaignNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by FilmProductionReqID").ToList();
  187. foreach (filmproductionrequisition objFilm in lstFilmproductionReq)
  188. {
  189. lstFilmProductionReq.Add(objFilm);
  190. }
  191. }
  192. else
  193. {
  194. var lstFilmproductionReq = ArtContext.filmproductionrequisitions.SqlQuery("SELECT * FROM filmproductionrequisition where CampaignNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by FilmProductionReqID").ToList();
  195. foreach (filmproductionrequisition objFilm in lstFilmproductionReq)
  196. {
  197. lstFilmProductionReq.Add(objFilm);
  198. }
  199. }
  200. if (lstRetainerFeeReq.Count() == 0)
  201. {
  202. var lstRetainerfeereq = ArtContext.retainerfeerequisitions.SqlQuery("SELECT * FROM retainerfeerequisition where CampaignNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by RetainerfeeReqID").ToList();
  203. foreach (retainerfeerequisition objRetainer in lstRetainerfeereq)
  204. {
  205. lstRetainerFeeReq.Add(objRetainer);
  206. }
  207. }
  208. else
  209. {
  210. var lstRetainerfeereq = ArtContext.retainerfeerequisitions.SqlQuery("SELECT * FROM retainerfeerequisition where CampaignNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by RetainerfeeReqID").ToList();
  211. foreach (retainerfeerequisition objRetainer in lstRetainerfeereq)
  212. {
  213. lstRetainerFeeReq.Add(objRetainer);
  214. }
  215. }
  216. if (lstStockImageReq.Count() == 0)
  217. {
  218. var lstStockImagereq = ArtContext.stockimagerequisitions.SqlQuery("SELECT * FROM stockimagerequisition where CampaginNo = '" + i.CreativeID + "' and IsActive = 1 and isApproved = 0 and statusId = 4 group by StockImageReqNo").ToList();
  219. foreach (stockimagerequisition objStockImage in lstStockImagereq)
  220. {
  221. lstStockImageReq.Add(objStockImage);
  222. }
  223. }
  224. else
  225. {
  226. var lstStockImagereq = ArtContext.stockimagerequisitions.SqlQuery("SELECT * FROM stockimagerequisition where CampaginNo = '" + i.CreativeID + "' and IsActive = 1 and isApproved = 0 and statusId = 4 group by StockImageReqNo").ToList();
  227. foreach (stockimagerequisition objStockImage in lstStockImagereq)
  228. {
  229. lstStockImageReq.Add(objStockImage);
  230. }
  231. }
  232. if (lstSystemWorkReq.Count() == 0)
  233. {
  234. var lstSystemWork = ArtContext.systemworkrequisitions.SqlQuery("SELECT * FROM systemworkrequisition where CampaignNo = '" + i.CreativeID + "' and IsActive = 1 and StatusID = 4 group by SystemReqNo").ToList();
  235. foreach (systemworkrequisition systemwork in lstSystemWork)
  236. {
  237. lstSystemWorkReq.Add(systemwork);
  238. }
  239. }
  240. else
  241. {
  242. var lstSystemWork = ArtContext.systemworkrequisitions.SqlQuery("SELECT * FROM systemworkrequisition where CampaignNo = '" + i.CreativeID + "' and IsActive = 1 and StatusID = 4 group by SystemReqNo").ToList();
  243. foreach (systemworkrequisition systemwork in lstSystemWork)
  244. {
  245. lstSystemWorkReq.Add(systemwork);
  246. }
  247. }
  248. if (lstOthersReq.Count() == 0)
  249. {
  250. var lstOthersreq = ArtContext.othersrequisitions.SqlQuery("SELECT * FROM othersrequisition where CampaignNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by OtherReqNo").ToList();
  251. foreach (othersrequisition objOthers in lstOthersreq)
  252. {
  253. lstOthersReq.Add(objOthers);
  254. }
  255. }
  256. else
  257. {
  258. var lstOthersreq = ArtContext.othersrequisitions.SqlQuery("SELECT * FROM othersrequisition where CampaignNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by OtherReqNo").ToList();
  259. foreach (othersrequisition objOthers in lstOthersreq)
  260. {
  261. lstOthersReq.Add(objOthers);
  262. }
  263. }
  264. if (lstTenderReq.Count() == 0)
  265. {
  266. var lstTendersreq = ArtContext.tender_noticerequisition.SqlQuery("SELECT *, count(TenderNoticeName) as tendername FROM tender_noticerequisition as awt group by tendernoticeID having CampaignNo = '" + i.CreativeID + "' and IsActive = 1").ToList();
  267. foreach (tender_noticerequisition objTenders in lstTendersreq)
  268. {
  269. lstTenderReq.Add(objTenders);
  270. }
  271. }
  272. else
  273. {
  274. var lstTendersreq = ArtContext.tender_noticerequisition.SqlQuery("SELECT *, count(TenderNoticeName) as tendername FROM tender_noticerequisition as awt group by tendernoticeID having CampaignNo = '" + i.CreativeID + "' and IsActive = 1").ToList();
  275. foreach (tender_noticerequisition objTenders in lstTendersreq)
  276. {
  277. lstTenderReq.Add(objTenders);
  278. }
  279. }
  280. if (lstillustrationreq.Count() == 0)
  281. {
  282. var lstillustrareq = ArtContext.illustrationrequisitions.SqlQuery("SELECT *,count(descriptions) FROM illustrationrequisition where CampaignNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by IllustrationNo").ToList();
  283. foreach (illustrationrequisition objillustra in lstillustrareq)
  284. {
  285. lstillustrationreq.Add(objillustra);
  286. }
  287. }
  288. else
  289. {
  290. var lstillustrareq = ArtContext.illustrationrequisitions.SqlQuery("SELECT * FROM illustrationrequisition where CampaignNo = '" + i.CreativeID + "' and isActive = 1 and isApproved = 0 group by IllustrationNo").ToList();
  291. foreach (illustrationrequisition objillustra in lstillustrareq)
  292. {
  293. lstillustrationreq.Add(objillustra);
  294. }
  295. }
  296. string strprojectClient = i.ProjectName + "-" + i.ClientName + "-" + i.branddesc;
  297. ht.Add(i.CreativeID, strprojectClient);
  298. k++;
  299. break;
  300. }
  301. }
  302. }

我能得到这样的数据
活动编号:100001->工作编号:1001入职日期:2019年3月28日

doinxwow

doinxwow1#

我想如果你改变了:

  1. from c in DBContext.jobrequisitions.Where(w => w.ISActive == true)

像这样的

  1. from c in DBContext.jobrequisitions
  2. where c.ISActive == true

你可以稍微提高一下性能,因为据我所知,fluent版本 Where 将作为对数据库的单独查询执行,而不是作为GROUPBY查询的一部分执行,从而导致数据库生成效率较低的执行计划。
顺便说一句,我建议不要在sql和fluent linq查询语法之间混用,除非绝对必要。
希望有帮助!

相关问题