使用 Parallel LINQ 进行数据分页
a) 第一种【耗时11~18s】,这种查询方式并不是很优化,但是目前也没有想到更好的方式,除了创建一张中间表,是不是可以使用【全文索引】?
SELECT * FROM 
(
  SELECT  ROW_NUMBER() OVER(ORDER BY IsPutAway) AS Num, * FROM
  (
    SELECT * FROM Goods_1 WHERE Name Like '%测试%' UNION ALL
    SELECT * FROM Goods_2 WHERE Name Like '%测试%' UNION ALL
    SELECT * FROM Goods_3 WHERE Name Like '%测试%' UNION ALL
    SELECT * FROM Goods_4 WHERE Name Like '%测试%' UNION ALL
    SELECT * FROM Goods_5 WHERE Name Like '%测试%' UNION ALL
    SELECT * FROM Goods_6 WHERE Name Like '%测试%' UNION ALL
    SELECT * FROM Goods_7 WHERE Name Like '%测试%' UNION ALL
    SELECT * FROM Goods_8 WHERE Name Like '%测试%' 
  ) AS T
) AS T
WHERE Num BETWEEN ((2 - 1) * 10 + 1) AND 2 * 10;
b) 第二种【耗时3~7s】,这种方式采用Linq 并行多线程的方式,查询数据库,再使用程序进行排序并分组。这是我想到的一种解决方式,效果还算理想!
List<VGoodsModel> dataList = new List<VGoodsModel>();
using (var content = CreateContext())
{
List<int> tableIndexList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
StringBuilder sbSqlAll = new StringBuilder();
sbSqlAll.AppendLine();
tableIndexList.AsParallel().ForAll(o =>
{
StringBuilder sbSql = new StringBuilder();
sbSql.AppendFormat("SELECT * FROM Goods_{0} with(nolock) WHERE", o);
if (Para.GoodsId <= 0)
sbSql.AppendFormat(" Type={0}", GoodsClassify.TYPE);
else
sbSql.AppendFormat(" Id={0} AND Type={1}", Para.GoodsId, GoodsClassify.TYPE);
if (!string.IsNullOrWhiteSpace(Para.GoodsName))
sbSql.AppendFormat(" AND Name LIKE '%{0}%'", Para.GoodsName);
var list = content.ExcuteList<VGoodsModel>(sbSql.ToString(), CommandType.Text, null);
dataList.AddRange(list);
sbSqlAll.AppendLine(string.Format("{0}, 执行SQL:{1}", o, sbSql.ToString()));
});
Weimob.Log.FloderLogger.CreateInstance("GetGoodsPagingByGoodsName").SingleLineDebug(sbSqlAll.ToString());
}
使用 Parallel LINQ 进行数据分页的更多相关文章
- asp.net LINQ实现数据分页
		using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ... 
- linq 大数据 sql 查询及分页优化
		前提: 需要nuget PredicateLib 0.0.5: SqlServer 2008R2 (建议安装 64 位): .net 4.5 或以上: 当前电脑配置: I7 4核 3.6G ... 
- .Net多线程编程—Parallel LINQ、线程池
		Parallel LINQ 1 System.Linq.ParallelEnumerable 重要方法概览: 1)public static ParallelQuery<TSource> ... 
- ASP.NET Core Web API 如何 数据分页 以及遇到'OFFSET' 附近有语法错误
		最近领导叫我做的一个B/S端的小项目,突发奇想想用到core web api 今天写数据分页的时候,就想着 用linq分页查询吧,直接上代码 _context.Skip(Size * (PageNum ... 
- mysq大数据分页
		mysql limit大数据量分页优化方法 Mysql的优化是非常重要的.其他最常用也最需要优化的就是limit.Mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急 ... 
- Sql Server 数据分页
		http://www.cnblogs.com/qqlin/archive/2012/11/01/2745161.html 1.引言 在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了 ... 
- Oracle、MySql、SQLServer数据分页查询
		看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ... 
- 知方可补不足~SQL2005使用ROW_NUMBER() OVER()进行数据分页
		回到目录 数据分页是这个经常说的东西,无论在WEBForm还是WinForm中它都会被单独拿出来,或者是公用组件,或者是公用类库,反正对于数据分页这个东西,总是我们关注的一个话题,但事实上,数据分页归 ... 
- salesforce 零基础开发入门学习(八)数据分页简单制作
		本篇介绍通过使用VF自带标签和Apex实现简单的数据翻页功能. 代码上来之前首先简单介绍一下本篇用到的主要知识: 1.ApexPages命名空间 此命名空间下的类用于VF的控制. 主要的类包括但不限于 ... 
随机推荐
- [日常工作]vCenter下虚拟机设置与宿主机时间同步的方法
			1. ESXi 能够实现CPU超售 同事开启多与CPU个数的虚拟机 不通的虚拟机采用了时间分片的处理, 所以有时候虚拟机内的时间可能会比宿主机的时间过的更慢, 越来越久之后虚拟机的时间就会比较离谱了. ... 
- Golang的位运算操作符的使用
			& 位运算 AND | 位运算 OR ^ 位运算 XOR &^ 位清空 (AND NOT) << 左移 >> 右移 感觉位运算操作符虽然在平时用得并不多,但是在 ... 
- protocol buffer开发指南(官方)
			欢迎来到protocol buffer的开发者指南文档,一种语言无关.平台无关.扩展性好的用于通信协议.数据存储的结构化数据序列化方法. 本文档是面向计划将protocol buffer使用的到自己的 ... 
- PHP常用工具类积累
			第一 请求第三方接口的工具类 例如,封装了get和post请求方法的工具类,代码如下: <?php class HttpClient{ /** * HttpClient * @param arr ... 
- delphi 导出到excel的第1种方法
			第一种方法delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):bo ... 
- Gulp实现静态网页模块化的方法详解
			前言: 在做纯静态页面开发的过程中,难免会遇到一些的尴尬问题.比如:整套代码有50个页面,其中有40个页面顶部和底部模块相同.那么同样的两段代码我们复制了40遍(最难受的方法).然后,这个问题就这样解 ... 
- C# 之抽象类和抽象方法
			概述:abstract 关键字 抽象类不能被实例化,抽象方法不能有方法体,抽象类中的所有抽象方法必须在子类中重写(override ),一个抽象类可以同时包含抽象方法和非抽象方法. abstract ... 
- lvs逻辑卷详解
			管理磁盘空间对系统管理员来说是一件重要的日常工作.一旦磁盘空间耗尽就需要进行一系列耗时而又复杂的任务,以提升磁盘分区中可用的磁盘空间.它也需要系统离线才能处理.通常这种任务会涉及到安装一个新的硬盘.引 ... 
- Minimum Cost POJ - 2516 (模板题 spfa最小费用最大流)
			题意: 人回家,一步一块钱,有x个人,y个房子,求能回家的最大人数且使之费用最小 解析: 就是....套模板,,,, 建图(⊙﹏⊙)...要仔细观察呐 对于人拆不拆都可以 都能过,,,,这里贴上拆开 ... 
- hdu5521(Meeting)spfa 层次网络最短路
			题意:给出几个集合,每个集合中有Si个点 且任意两个点的距离为ti,现在要求两个人分别从1和n出发,问最短多长时间才能遇到,且给出这些可能的相遇点; 取两个人到达某点时所用时间大的值 然后取最小的 ... 
