linq语句复杂查询和分开查询的性能对比

刚开始以为复杂的linq语句查询会不会比分开来写效率高,因为复杂的语句关联和嵌套多,执行应该慢。分开写虽然多了一次io处理,但是关联比较少,数据了比价少,和朋友讨了一下,回家就做了个测试,废话不多说,直接上代码。

  var dbconten2 = new SqlSugarTestEntities();
            Stopwatch sw2 = new Stopwatch();
            sw2.Start();
            var orderproduct = (from o in dbconten2.order
                                join p in dbconten2.product on o.sku equals p.sku
                                select new
                                {
                                    sku=o.sku,
                                    name=o.name
                                }).ToList();
            var lable = (from m in dbconten2.labelMbp
                         join l in dbconten2.lable on m.lableID equals l.id
                         select new
                         {
                             sku=m.sku,
                             img=l.imgUrl
                         }).ToList();
            sw2.Stop();
            var results = (from a in orderproduct
                           join b in lable on a.sku equals b.sku into h
                           from n in h.DefaultIfEmpty()
                           select new
                           {
                               sku = a.sku,
                               img =n==null?"": n.img,
                               name = a.name
                           }).ToList();

           
            var time2 = sw2.ElapsedMilliseconds.ToString();

            var dbconten = new SqlSugarTestEntities();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            var result = (from o in dbconten.order
                          join p in dbconten.product on o.sku equals p.sku
                          join m in dbconten.labelMbp on p.sku equals m.sku into mbp
                          from mp in mbp.DefaultIfEmpty()
                          join l in dbconten.lable on mp.lableID equals l.id into ld
                          from d in ld.DefaultIfEmpty()
                          select new
                          {
                              sku = p.sku,
                              img = d.imgUrl,
                              name = o.name

                          });
            var ss = result.ToList();
           var aa= ss.GroupBy(g => g.sku).ToList();

            sw.Stop();
            var time = sw.ElapsedMilliseconds.ToString();
            Console.WriteLine("linq:" + time);
            //Console.WriteLine("分开:" + time2); 

数据库io操作耗时还是比价大的,在操作数据库时能一次查询出来就不用多次。

性能永远是个值得讨论的话题,直接自己真正的测试了才知道结果,就像好多人争论的 in,not in 一样,花大把的时间争论,还不如自己花点时间测试

事实胜于雄辩,所有的讨论都没有直接测试来的直接。

原文地址:https://www.cnblogs.com/kinggongwei/p/6777757.html