ibcadmin 发表于 2019-10-24 09:50:32

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

<p>最近不停在使用Petapoco+Entity Framework Core联合开辟一套系统。</p>
<p>使用EFCore举行Code First编码,使用PMC命令生成数据库表的信息。</p>
<p>使用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。</p>
<p>在数据库操纵过程中,发现每个Controller的Index页面加载的非常缓慢,加载完成约莫须要5s的时间,在浏览器端等候的时间相对来说黑白常长的一个时间。对于出现的问题终于有时间举行办理一下了。</p>
<p>先来看一下未使用<code data-backticks="1">Order By</code>加载页面的耗时环境,第一个图中涉及的表的主键为guid类型,第二个图中涉及的主键为ulong类型,对于差别的主键举行分页查询时也有较大影响。<br>
<div align="center"></div><br>
图一<br>
<div align="center"></div><br>
图二<br>
使用<code data-backticks="1">Order by</code>加载页面的耗时环境<br>
<div align="center"></div><br>
图三<br>
<div align="center"></div><br>
图四</p>
<hr>
<p>对出现的问题,使用StopWatch举行监督运行时间的长短,使用了分页的两种方法,区别是否加<code data-backticks="1">Order By</code>语句,构成成如下四种环境:</p>
<ul>
<li>PageAsync Order by</li>
<li>PageAsync</li>
<li>Page Order by</li>
<li>Page</li>
</ul>
<p>代码如下:</p>
<code>Stopwatch stop = new Stopwatch();
stop.Start();
var pages = await _context.PageAsync<productdto>(page, itemsPerPage, "order by id");
stop.Stop();
_logger.Information($" Order By Async查询的实行时间:{stop.Elapsed}");
stop.Restart();
var pages2 = await _context.PageAsync<productdto>(page, itemsPerPage );
stop.Stop();
_logger.Information($"Async查询的实行时间:{stop.Elapsed}");
//_logger.Information($"SQL:{_context.LastSQL}");

stop.Restart();
var ps = _context.Page<productdto>(page, itemsPerPage, "order by id");

stop.Stop();
_logger.Information($"Order By查询的实行时间:{stop.Elapsed}");

stop.Restart();
var ps2 =await _context.PageAsync<productdto>(page, itemsPerPage);

stop.Stop();
_logger.Information($"查询的实行时间:{stop.Elapsed}");
stop.Restart();

var x = _mapper.Map<page<productviewmodel>&gt;(pages);
stop.Stop();
_logger.Information($"Mapper的实行时间:{stop.Elapsed}");
</code>
<p>运行背景输出的日记信息,可以看到对于是否加<code data-backticks="1">Order By</code>对查询耗时的影响黑白常大的,对是否使用异步方法对耗时也有部分的影响<br>
<div align="center"></div></p>
<p>对于上述的四种环境再次使用Benchmark举行一次性能测试,对使用的数据表的实体类不在列出</p>
<code>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 =&gt;
            new Database(DatabaseConfiguration.Build()
                .UsingConnectionString(
                  "server=192.168.88.3;port=3306;uid=root;pwd=biobase;database=BiobaseProductionQrCode;")
                .UsingProvider<mariadbdatabaseprovider>());

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

      
      
      public void Page()
      {
            Database.Page<productmanufacturelinedetaildto>(1, 20);
      }

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

      
      public void PageAsync()
      {
            Database.PageAsync<productmanufacturelinedetaildto>(1, 20);
      }
    }
}
</code>
<p>对性能测试效果可以看到,使用<code data-backticks="1">Order By</code>对性能的影响确实黑白常大。<br>
<div align="center"></div><productviewmodel data-tomark-pass=""></productviewmodel></p><br><br/><br/><br/><br/><br/>来源:<a href="https://www.cnblogs.com/sesametech-netcore/p/11726779.html" target="_blank">https://www.cnblogs.com/sesametech-netcore/p/11726779.html</a>
页: [1]
查看完整版本: .NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响