EF获取多个数据集以及MySQL分页数据查询优化
背景: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分页数据查询优化相关推荐
- python豆瓣mysql_python爬虫获取豆瓣电影——Python操作MySQL存储数据
30 May 2015 爬虫抓到的数据需要存储到MySQL中,所以我们需要熟悉下使用Python操作MySQL数据库.首先你的机器上要安装MySQLdb,MySQLdb是用于Python连接Mysql ...
- Mysql分页关联查询优化
以下内容参考<高性能Mysql> 优化关联查询 这个话题基本上整本书都在讨论,这里需要特别提到的是: 确保ON或者USING子句中的列上有索引.在创建索引的时候就要考虑到关联的顺序. 当表 ...
- 解决mysql分页数据错乱问题
今天同事遇到个麻烦的问题,写了一个分页的功能,结果查出来的数据竟然有重复,有些数据同时在相邻的两页出现了, 但是查询总数据不分页的时候又只有一条,这里主要是排序的问题,在mysql中用 order b ...
- php加mysql分页_php mysql 分页函数
一款超简单的php mysql 分页,也是很实例的一款函数,他可以自动获取用户增加的参数,而不需要用户来增加,很自能化的一款自能分页程序. ------------------------------ ...
- mysql分页tmp_count,MySQL MyISAM和InnoDB引擎的写入速度优化比较,分页速度优化
以下的文章主要介绍的是MySQL MyISAM的引擎和InnoDB引擎的实际性能的比较,我们首先是通过MySQL数据库的表结构来出MySQL MyISAM的引擎和InnoDB引擎的实际性能的实际操作. ...
- mysql分页查询关键_MySQL优化教程之超大分页查询
背景 基本上只要是做后台开发,都会接触到分页这个需求或者功能吧.基本上大家都是会用MySQL的LIMIT来处理,而且我现在负责的项目也是这样写的.但是一旦数据量起来了,其实LIMIT的效率会极其的低, ...
- jdbc mysql分页_JDBC【数据库连接池、DbUtils框架、分页】
1.数据库连接池 什么是数据库连接池 简单来说:数据库连接池就是提供连接的... 为什么我们要使用数据库连接池 数据库的连接的建立和关闭是非常消耗资源的 频繁地打开.关闭连接造成系统性能低下 编写连接 ...
- MySQL 分页优化中的 “ INNER JOIN方式优化分页算法 ” 到底在什么情况下会生效?...
最近无意间看到一个 MySQL 分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案.因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的 ...
- MySQL 分页优化中的 “ INNER JOIN方式优化分页算法 ” 到底在什么情况下会生效?
最近无意间看到一个 MySQL 分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案.因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的 ...
最新文章
- 文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解
- 马斯克的中国救星,特斯拉上海工厂内部首度曝光,数百台机器人维持疫情期间生产...
- GIS坡度分析入门实例 - 使用SuperMap
- G6 图可视化引擎——简介
- Employee Assign Organization unit
- 记录自己的nest学习之旅
- Python(7)-程序执行的原理
- 跌落测试显示:iPhone 13/13 Pro耐用性和前代几乎相同
- 文件操作,读文件、写文件、获取文件长度、删除文件、判断文件格式等。
- 实现百战铁路售票系统临时车次的添加功能
- matlab导线网平差,导线网平差算例教程
- 企业之pacemaker基本概念及其原理
- 【数理统计】单因素方差分析
- 台式机+笔记本的扩展模式+远程登录设置
- android的listview分组显示的时候layout_marginTop失效的解决办法
- GRE词汇整理(magoosh版本)
- 最小二乘法--通俗解释
- [收藏]《观察与思考》:相信中国,寻找下一个比尔·盖茨
- 【ML】混淆矩阵(Accuracy,Precision,Recall,F1)
- 数控系统的计算机仿真论文,数控系统的计算机仿真编制
热门文章
- 回退n帧协议c语言代码,[计算机网络]Ch.3 数据链路层
- php调整表格样式,表格的创建以及样式修改
- python logging 不输出控制台_python logging日志配置,如何不输出到控制台
- 本地缓存需要高时效性怎么办_详解微信小程序缓存--缓存时效性
- 孙三奇 计算机科学,墓徒暗战-第二百零八章 惨烈的变故
- python图像增强_Python图像的增强处理操作示例【基于ImageEnhance类】
- 我国在量子计算机领域的发展情况的感受,量子计算机的现状及发展趋势.doc
- kafka和zookeeper一键启停脚本(以及kafka关不掉问题解决)
- iis php 0x80070032,访问网站时 HTTP 错误 404.17 - Internet Information Services | Microsoft Docs...
- c# 非顶层截屏_C#中三种截屏方式总结