.NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响

640?wx_fmt=gif

640?wx_fmt=png

介绍

最近一直在使用Petapoco+Entity Framework Core结合开发一套系统。

使用EFCore进行Code First编码,使用

使用Petapoco进行数据库的常规操作。并且结合PetaPoco.SqlKata的使用,减少了编写SQL语句的工作量,对提升开发效率有很大的帮助。Petapoco对数据库的支持非常的全,包括常规的一下数据库:SQL Server,SQL Server CE,MS Access,SQLite,MySQL,MariaDB,PostgreSQL,Firebird DB和Oracle。当然SQL Server为默认的支持。PetaPoco.SqlKata支持的数据库也是非常全的,包括:SqlServer, MySql, Postgres, Firebird, SQLite, Oracle。

遇到的问题

在数据库操作过程中,发现每个Controller的Index页面加载的非常缓慢,加载完成大约需要5s的时间,在浏览器端等待的时间相对来说是非常长的一个时间。于出现的问题终于有时间进行解决一下了。

系统运行加载页面耗时情况

先来看一下未使用Order By加载页面的耗时情况,第一个图中涉及的表的主键为guid类型,第二个图中涉及的主键为ulong类型,对于不同的主键进行分页查询时也有较大影响。

640?wx_fmt=gif

640?wx_fmt=png640?wx_fmt=png

使用OrderBy的耗时情况

使用Order by加载页面的耗时情况

640?wx_fmt=png640?wx_fmt=png

解决方法测试耗时

码代码,未有时

对出现的问题,使用StopWatch进行监视运行时间的长短,使用了分页的两种方法,区别是否加Order By语句,组成成如下四种情况:

  • PageAsync Order by

  • PageAsync

  • Page Order by

  • Page

代码如下:

 
 

运行后台输出的日志信息,可以看到对于是否加Order By

对查询耗时的影响是非常大的,对是否使用异步方法对耗时也有部分的影响

640?wx_fmt=png

Benchmark测试

对于上述的四种情况再次使用Benchmark进行一次性能测试,对使用的数据表的实体类不在列出:

namespace PetaPocoPageBenchMark	
{	
    class Program	
    {	
        static void Main(string[] args)	
        {	
            	
            var summary = BenchmarkRunner.Run<PetapocoPage>();	
            Console.WriteLine("Hello World!");	
        }	
    }	

	
    public class PetapocoPage	
    {	
        public static IDatabase Database =>	
            new Database(DatabaseConfiguration.Build()	
                .UsingConnectionString(	
                    "server=192.168.88.3;port=3306;uid=root;pwd=biobase;database=BiobaseProductionQrCode;")	
                .UsingProvider<MariaDbDatabaseProvider>());	

	
        [Benchmark]	
        public void PageOrderBy()	
        {	
            Database.Page<ProductManufactureLineDetailDto>(1, 20, "order by CreateDate");	
        }	

	
        	
        [Benchmark]	
        public void Page()	
        {	
            Database.Page<ProductManufactureLineDetailDto>(1, 20);	
        }	

	
        [Benchmark]	
        public void PageOrderByAsync()	
        {	
            Database.PageAsync<ProductManufactureLineDetailDto>(1, 20, "order by CreateDate");	
        }	

	
        [Benchmark]	
        public void PageAsync()	
        {	
            Database.PageAsync<ProductManufactureLineDetailDto>(1, 20);	
        }	
    }	
}

Benchmark测试结果

对性能测试结果可以看到,使用Order By对性能的影响确实是非常大。640?wx_fmt=png

赶快来分享关注吖

640?wx_fmt=jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值