.NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响
介紹
最近一直在使用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類型,對于不同的主鍵進行分頁查詢時也有較大影響。
使用OrderBy的耗時情況
使用Order by加載頁面的耗時情況
解決方法測試耗時
碼代碼,未有時
對出現的問題,使用StopWatch進行監視運行時間的長短,使用了分頁的兩種方法,區別是否加Order By語句,組成成如下四種情況:
PageAsync Order by
PageAsync
Page Order by
Page
代碼如下:
運行后臺輸出的日志信息,可以看到對于是否加Order By
對查詢耗時的影響是非常大的,對是否使用異步方法對耗時也有部分的影響
?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對性能的影響確實是非常大。
趕快來分享關注吖總結
以上是生活随笔為你收集整理的.NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你必须知道的容器监控 (1) Docke
- 下一篇: .Net Core 3.0 Identi