背景:MySQL分页查询语句为

SELECT * FROM TABLE LIMIT 0,10;

一般页面还会获取总条数,这时候还需要一条查询总条数语句

SELECT COUNT(*) FROM TABLE LIMIT 0,10

这样数据库需要执行两次查询操作。MySQL提供了SQL_CALC_FOUND_ROWS追踪总条数的函数,FOUND_ROWS取得总条数。

SELECT SQL_CALC_FOUND_ROWS * FROM TABLE LIMIT 0,10;SELECT FOUND_ROWS();

上面SQL语句虽然有两个结果集,但只查询一次数据库,可以提升效率。

在asp.net mvc项目中,ORM仅仅使用EF的话,处理两个结果集就有些复杂,下面这段代码可以解决

 1 /// <summary>
 2 /// 获取分页数据以及总条数(EF获取多个数据集)
 3 /// </summary>
 4 /// <typeparam name="T">实体类</typeparam>
 5 /// <param name="sql">SQL语句(分页查询+SELECT FOUND_ROWS查询)</param>
 6 /// <param name="parameters">SQL参数</param>
 7 /// <param name="db">数据库上下文</param>
 8 /// <param name="queryData">返回数据</param>
 9 /// <param name="rowCount">总行数</param>
10 /// <param name="needReturnTotal">是否需要返回总行数</param>
11 public void GetQueryDataAndRowCount<T>(string sql, List<MySqlParameter> parameters, DbContext db, out List<T> queryData, out int rowCount, bool needReturnTotal = true)
12 {
13     var data = new List<T>();
14     var count = 0;
15     try
16     {
17         var cmd = db.Database.Connection.CreateCommand();
18         cmd.CommandText = sql;
19         if (parameters.Count > 0)
20         {
21             cmd.Parameters.AddRange(parameters.ToArray());
22         }
23         db.Database.Connection.Open();
24         var reader = cmd.ExecuteReader();
25         if (reader.HasRows)
26         {
27             data = ((IObjectContextAdapter)db).ObjectContext.Translate<T>(reader).ToList();
28             if (needReturnTotal)
29             {
30                 reader.NextResult();
31                 count = ((IObjectContextAdapter)db).ObjectContext.Translate<int>(reader).FirstOrDefault();
32             }
33         }
34     }
35     finally
36     {
37         db.Database.Connection.Close();
38     }
39     queryData = data;
40     rowCount = count;
41 }

View Code

转载于:https://www.cnblogs.com/LiuNew/p/10565005.html

EF获取多个数据集以及MySQL分页数据查询优化相关推荐

  1. python豆瓣mysql_python爬虫获取豆瓣电影——Python操作MySQL存储数据

    30 May 2015 爬虫抓到的数据需要存储到MySQL中,所以我们需要熟悉下使用Python操作MySQL数据库.首先你的机器上要安装MySQLdb,MySQLdb是用于Python连接Mysql ...

  2. Mysql分页关联查询优化

    以下内容参考<高性能Mysql> 优化关联查询 这个话题基本上整本书都在讨论,这里需要特别提到的是: 确保ON或者USING子句中的列上有索引.在创建索引的时候就要考虑到关联的顺序. 当表 ...

  3. 解决mysql分页数据错乱问题

    今天同事遇到个麻烦的问题,写了一个分页的功能,结果查出来的数据竟然有重复,有些数据同时在相邻的两页出现了, 但是查询总数据不分页的时候又只有一条,这里主要是排序的问题,在mysql中用 order b ...

  4. php加mysql分页_php mysql 分页函数

    一款超简单的php mysql 分页,也是很实例的一款函数,他可以自动获取用户增加的参数,而不需要用户来增加,很自能化的一款自能分页程序. ------------------------------ ...

  5. mysql分页tmp_count,MySQL MyISAM和InnoDB引擎的写入速度优化比较,分页速度优化

    以下的文章主要介绍的是MySQL MyISAM的引擎和InnoDB引擎的实际性能的比较,我们首先是通过MySQL数据库的表结构来出MySQL MyISAM的引擎和InnoDB引擎的实际性能的实际操作. ...

  6. mysql分页查询关键_MySQL优化教程之超大分页查询

    背景 基本上只要是做后台开发,都会接触到分页这个需求或者功能吧.基本上大家都是会用MySQL的LIMIT来处理,而且我现在负责的项目也是这样写的.但是一旦数据量起来了,其实LIMIT的效率会极其的低, ...

  7. jdbc mysql分页_JDBC【数据库连接池、DbUtils框架、分页】

    1.数据库连接池 什么是数据库连接池 简单来说:数据库连接池就是提供连接的... 为什么我们要使用数据库连接池 数据库的连接的建立和关闭是非常消耗资源的 频繁地打开.关闭连接造成系统性能低下 编写连接 ...

  8. MySQL 分页优化中的 “ INNER JOIN方式优化分页算法 ” 到底在什么情况下会生效?...

    最近无意间看到一个 MySQL 分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案.因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的 ...

  9. MySQL 分页优化中的 “ INNER JOIN方式优化分页算法 ” 到底在什么情况下会生效?

    最近无意间看到一个 MySQL 分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案.因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的 ...

最新文章

  1. 文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解
  2. 马斯克的中国救星,特斯拉上海工厂内部首度曝光,数百台机器人维持疫情期间生产...
  3. GIS坡度分析入门实例 - 使用SuperMap
  4. G6 图可视化引擎——简介
  5. Employee Assign Organization unit
  6. 记录自己的nest学习之旅
  7. Python(7)-程序执行的原理
  8. 跌落测试显示:iPhone 13/13 Pro耐用性和前代几乎相同
  9. 文件操作,读文件、写文件、获取文件长度、删除文件、判断文件格式等。
  10. 实现百战铁路售票系统临时车次的添加功能
  11. matlab导线网平差,导线网平差算例教程
  12. 企业之pacemaker基本概念及其原理
  13. 【数理统计】单因素方差分析
  14. 台式机+笔记本的扩展模式+远程登录设置
  15. android的listview分组显示的时候layout_marginTop失效的解决办法
  16. GRE词汇整理(magoosh版本)
  17. 最小二乘法--通俗解释
  18. [收藏]《观察与思考》:相信中国,寻找下一个比尔·盖茨
  19. 【ML】混淆矩阵(Accuracy,Precision,Recall,F1)
  20. 数控系统的计算机仿真论文,数控系统的计算机仿真编制

热门文章

  1. 回退n帧协议c语言代码,[计算机网络]Ch.3 数据链路层
  2. php调整表格样式,表格的创建以及样式修改
  3. python logging 不输出控制台_python logging日志配置,如何不输出到控制台
  4. 本地缓存需要高时效性怎么办_详解微信小程序缓存--缓存时效性
  5. 孙三奇 计算机科学,墓徒暗战-第二百零八章 惨烈的变故
  6. python图像增强_Python图像的增强处理操作示例【基于ImageEnhance类】
  7. 我国在量子计算机领域的发展情况的感受,量子计算机的现状及发展趋势.doc
  8. kafka和zookeeper一键启停脚本(以及kafka关不掉问题解决)
  9. iis php 0x80070032,访问网站时 HTTP 错误 404.17 - Internet Information Services | Microsoft Docs...
  10. c# 非顶层截屏_C#中三种截屏方式总结